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 ));
    (...)

Organize maxは、接続されているすべてのユーザー(CUserへのポインターを所有しているすべてのユーザー)から読み取る0から9(10人のトップユーザー)までのnMaxを埋める必要があり、nMax[0]に設定します。 1] 2番目にキル数が最も多く、nMax [2] 3番目にキル数が最も多いなど...これを行う方法についての素晴らしいアイデアはありますか?

-編集

もっと簡単になります。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

ab...を使用する代わりに、 (BTW、クラス名としては好きではありません)のをf使用します。std::vectorCUserCUser

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番号(またはそのようなもの)をクラスに追加する必要があります。

編集:

inta ... jのsの値をnHold昇順で取得するには、既存の順序でそれらを挿入してから、次のように並べ替えます。

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

std::sort(nHold, nHold+9);
于 2012-06-28T23:33:17.780 に答える
2

最初の素晴らしいアイデア:生のCスタイルの配列の使用は避けてください。エラーチェックはほとんど行われず、動的にサイズを変更することはできません。適切な配列を使用しても、パフォーマンスの面ではそれほど役に立ちません。

std :: vectorは適切ですが、必要と思われる場合はstd :: array )。

2番目の素晴らしいアイデア: std::sortなどのすでに作成されたソートアルゴリズムを採用します。

于 2012-06-28T23:31:04.883 に答える