1

我正在尝试按 desc 顺序设置列表,将最高设置到列表的前面,但它没有这样做,这是我正在使用的结构

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 回答