C ++记分牌很难

时间:2012-06-28 23:24:49

标签: c++ sorting

你好再一次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];

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

2 个答案:

答案 0 :(得分:2)

第一个好主意:避免使用原始C风格的数组,它们会对你进行少量错误检查...无法动态调整大小......即使你得到它们,也不会在性能方面给你太多帮助右。

std::vector很好,std::array如果您觉得必须这样做。

第二个好主意:采用已编写的排序算法,例如std::sort

答案 1 :(得分:2)

我没有使用ab ... 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);