你好再一次stackoverflow的人,这真的很难,它一直在折磨我的大脑。我必须做的是,一个多人服务器双面记分牌。基本上10个客户端连接到我的服务器应用程序,在这个事件中,每次玩家杀死另一个玩家时他的杀戮都会增加,每个连接到服务器的玩家都有一个类指针
class CUser
{
(...)
public:
unsigned m_uEventKills;
unsigned m_uEventDeaths;
(...)
};
每当有人杀死某人时,m_uEvenKills就会增加,而且对于垂死的玩家,m_uEventDeaths也会增加。想象一下玩家a,b,c,d,e,f中的每一个都有随机杀戮(a,b,c,d ......是指向CUser的指针)所以:
a->m_uEventKills is 72
b->m_uEventKills is 13
c->m_uEventKills is 2
d->m_uEventKills is 44
e->m_uEventKills is 21
f->m_uEventKills is 33
和死亡的随机值。
我有这个:
int nMax[10];
void OrganizeMax()
{
memset( &nMax, 0, sizeof( nMax ));
(...)
组织max必须填写nMax,从0到9(10个顶级用户)读取所有连接用户(他们都拥有指向CUser的指针) - > m_uEventKills,并设置为nMax [0]最多杀死的用户,对于nMax [1],第二次杀死最多,nMax [2]得分最多,等等...... 关于如何做到这一点的任何睿智的想法?
- 编辑
我会更简单,我有10个变种。
int a,b,c,d,e,f,g,h,i,j;
a = 3;
b = 61;
c = 29;
d = 44;
e = 12;
f = 8;
g = 27;
h = 11;
i = 0;
j = 4;
我需要将这些变量插入
int nHold[10];
按降序排列,我该怎么做?
答案 0 :(得分:2)
第一个好主意:避免使用原始C风格的数组,它们会对你进行少量错误检查...无法动态调整大小......即使你得到它们,也不会在性能方面给你太多帮助右。
(std::vector很好,std::array如果您觉得必须这样做。
第二个好主意:采用已编写的排序算法,例如std::sort。
答案 1 :(得分:2)
我没有使用a
,b
... f
,而是使用std::vector
CUser
(BTW,我不喜欢) CUser
作为班级名称):
std::vector<CUser> users;
如果这是您关心用户的仅顺序,我会将排序定义为CUser
类的一部分:
class CUser {
// ...
bool operator<(CUser const &other) const {
return m_uEventKills < other.m_uEventKills;
}
};
然后,当您需要按正确顺序排序的用户时,您可以执行以下操作:
std::sort(users.begin(), users.end());
然而,您可能需要在CUser
类中添加一个ID号(或类似的东西),以跟踪哪个用户是哪个,无论它们在哪个顺序排列那一刻。
编辑:
要将{j}中的int
s的值按升序排列到nHold
,您可能只想将它们按现有顺序插入,然后排序:
nHold[0] = a;
nHold[1] = b;
//...
nHold[9] = j;
std::sort(nHold, nHold+9);