列表根本没有排序

时间:2012-05-10 15:40:42

标签: c++ visual-c++

我正在更新列表,然后尝试对列表前面的最高sVar1进行排序,但它没有这样做,我正在使用6.0 VS

while(Iter != m_SomeList.end())
{
    if((*Iter)->sVar1 == 1) 
    {
        (*Iter)->sVar1++;
    }

    Iter++;
}

m_SomeList.sort(Descending());

Iter = m_SomeList.begin();

while(Iter != m_SomeList.end())
    {
        //now display the content of the list

我的降序排序功能

struct Descending : public greater<_LIST_DETAIL*> 
{
    bool operator()(const _LIST_DETAIL* left, const _LIST_DETAIL* right)
    {
        return (left->sVar1 > right->sVar1);
    }
};

任何人都可以发现错误吗?

编辑:更新的代码,它包含拼写错误...

1 个答案:

答案 0 :(得分:2)

这只是搞砸了。

首先,您不是从std::greater派生出来的 - 您直接使用 std::greater,如:

(psudocode,未编译)

std::sort( v.begin(), v.end(), std::greater() );

...或者,如果这对你没有好处,可以从std::unary_function派生出自己的仿函数:

struct Descending : public unary_function<bool, _LIST_DETAIL>
{
    bool operator()(const _LIST_DETAIL* left, const _LIST_DETAIL* right) const // note const
    {
        return (left->sVar1 > right->sVar1);
    }
};

其次,使用前导下划线后跟大写名称是由语言保留的。

第三,您使用的是14年前的编译器,MicroSoft多年前已终止所有支持。更重要的是,根据今天的标准,这是一堆垃圾。它是新的时候甚至都不是很好。你需要摆脱VS 6.0。