2015-10-24 134 views
3

我想排序節點的向量。 我遵循this thread的建議並且超載了我的
struct的<運營商。但是,在調用排序之後,我沒有獲得排序列表。通過重載對自定義對象的向量排序<

vector<node*> test 
//fill test with nodes 
sort(test.begin(),test.end()); 

輸出:

​​

我通過以下稱排序

Presort data is: 1,1,2,3,3,1,2,1,1 
Postsort data is: 3,2,1,1,1,1,2,1,3 
+0

「left」a nd'right'是指?排序後可能需要更新它們。 – 1201ProgramAlarm

+0

這是代碼中未列出的其他部分。我刪除它們以減少混淆 – Matt

回答

5

既然要排序的指針的向量,但運營商適用於struct,C++忽略你的運營商<過載。

您可以提供呼叫您operator <自定義比較,類似這樣的

std::sort(test.begin(), test.end(), [](const node* pa, const node* pb) { 
    return (*pb) < (*pa); 
}); 

或代碼的比較直入拉姆達,丟棄的<未使用過載,像這樣:

std::sort(test.begin(), test.end(), [](const node* pa, const node* pb) { 
    return pb->frequency < pa->frequency; 
}); 
+0

您的第一個解決方案對每個指針使用一對括號,這是完全無用的。解引用指針不需要括號。 –

+0

我試圖讓你的解決方案能夠正常工作,但至今還沒有運氣 – Matt

+0

@Matt這需要C++ 11或更高版本。 VC沒有它; g ++使用'-std = C++ 11'選項。 – dasblinkenlight

0

最簡單的方法是使用lambdas:

sort(test.begin(),test.end(), [](const node &lhs, const node &rhs){return lhs->frequency < rhs->frequency;}); 
+2

您需要將&lhs和&rhs更改爲* lhs和* rhs。通過這些改變,我能夠立即開始工作 – Matt