0

大家好,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];

按降序排列,我该怎么做?

4

2 回答 2

2

第一个绝妙的主意:避免使用原始的 C 样式数组,它们几乎不会为您进行错误检查...无法动态调整大小...即使您正确使用它们,在性能方面也不会真正帮助您。

std::vector很好,如果你觉得必须的话, std::array )。

第二个绝妙的想法:使用已经编写好的排序算法,例如std::sort

于 2012-06-28T23:31:04.883 回答
2

我不使用a, b... f,而是使用std::vectorof CUser(顺便说一句,我不喜欢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());

但是,您可能需要在类中添加一个 ID 号(或类似的东西)来CUser跟踪哪个用户是哪个用户,而不管他们目前的排列顺序如何。

编辑:

要按升序获取inta...j 中 s的值nHold,您可能只想按现有顺序插入它们,然后排序:

nHold[0] = a;
nHold[1] = b;
//...
nHold[9] = j;

std::sort(nHold, nHold+9);
于 2012-06-28T23:33:17.780 回答