2012-05-14 100 views
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,之前,我的意見的,我需要升級,我知道這是一個古老的編譯器,但在我的情況我需要它,所以請在回答時記住這一點,最好的描述性的,有用的答案獲得投票。

+0

你確定你需要指針嗎?你沒有很好地清理它們。 – chris

回答

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 

而且克里斯提到的,你可能想通過指針,而不是存儲由值這些對象,所以你不」不得不清理它們。

+0

我不認爲VS 6.0可以使用lambdas,但是這種情況下它們的工作特別好。 – chris

+0

@chris是啊,添加了一條評論,指出了lambda的C++ 11性。 –