2011-07-21 43 views
10

如何基於兩個不同的比較標準對STL向量進行排序?默認的sort()函數只需要一個分類器對象。對兩個值的STL向量進行排序

+0

你能詳細說明嗎?你想要什麼標準? – iammilind

+0

更多信息 –

+0

我正在排序具有兩種不同屬性的對象列表:距離和重要性。其中一個屬性的比較(更高的重要性)會覆蓋另一個(更近的距離)。所以說,如果一個對象的重要性是1而另一個是0,那麼即使距離較大,它也會被排序爲高於第二個對象。我無法通過一個比較找出一個辦法。 – toastie

回答

25

您需要將兩個標準合併爲一個。 下面是一個例子,說明如何根據第一個字段和第二個字段對具有第一個和第二個字段 的結構進行排序。

#include <algorithm> 

struct MyEntry { 
    int first; 
    int second; 
}; 

bool compare_entry(const MyEntry & e1, const MyEntry & e2) { 
    if(e1.first != e2.first) 
    return (e1.first < e2.first); 
    return (e1.second < e2.second); 
} 

int main() { 
    std::vector<MyEntry> vec = get_some_entries(); 
    std::sort(vec.begin(), vec.end(), compare_entry); 
} 

注:執行compare_entry更新爲Nawaz使用代碼。

+0

+1,直向前。我以同樣的方式思考。但仍然懷疑OP是否按照相同的思路思考。 – iammilind

+0

很好,工作,謝謝!我忘了if(e1.first == e2.first)部分,所以對我來說是失敗的。 – toastie

+2

@Michael:我添加了'compary_entry'函數的另一個實現。希望它與你合適。 :-) +1順便說一句。 – Nawaz

相關問題