1

降順でリストを設定しようとしていて、リストの先頭に最高のものを設定していますが、それを行っていません。これが私が使用している構造体です

struct  datalist
{
    short   index;
    int nNumber;

    bool operator > (const datalist& a) const
    {
        return (nNumber > a.nNumber);
    }
};

そして私はやっています

datalist* pAR = new datalist;
pAR->index = 1000;
pAR->nNumber = 10;
m_SomeList.push_back(pAR);

pAR = new datalist;
pAR->index = 1005;
pAR->nNumber = 30;
m_SomeList.push_back(pAR);

pAR = new datalist;
pAR->index = 0;
pAR->nNumber = 20;
m_SomeList.push_back(pAR);

m_SomeList.sort(greater<datalist*>());

ソート後、出力しています20, 30, 10。私はVS 6.0を使用しています。アップグレードが必要というコメントを得る前に、それが古いコンパイラであることは知っていますが、私の場合はそれが必要なので、答えるときに覚えておいてください。最も説明的で役立つ回答が投票されます。

4

1 に答える 1

4

ポインターのコンテナーを並べ替えているため、コンテナーはポインターを使用するため、アドレスによって降順以外でstd::greater並べ替えられます。

あなたはこのようなことをしたい:

struct Comp {
    bool operator()(const datalist* a, const datalist* b) {
        return *a > *b;
    }
};

m_SomeList.sort(Comp());

また

m_SomeList.sort([](const datalist* a, const datalist* b) {
    return *a > *b;
}); // for C++11

また、クリスが述べたように、これらのオブジェクトをポインターではなく値で保存したい場合があるため、それらをクリーンアップする必要はありません。

于 2012-05-14T00:45:46.637 に答える