2017-03-17 52 views
0

我搜索了很多,但我沒有找到我想要的答案。基於密鑰和值的C++ map自定義比較方法

我需要根據鍵和值對C++映射進行排序。 這樣的方法:

bool mycomp(mii::iterator a, mii::iterator b) { 
    if (a->second > b->second) 
     return true; 
    else if (a->second < b->second) 
     return false; 
    else 
     return a->first > a->second; 
} 

,並用它類似的東西

sort(m.begin() , m.end(), mycomp); 

其中m爲:

map<int,int> m; 

我可以做這樣的事情?如果是的話,應該是什麼正確的語法。

+0

由於地圖不是序列,因此無法「排序」地圖。 –

+0

@KerrekSB這是不正確的。 'std :: map'''內容默認按''''std :: less '''排序,但是可以提供自定義比較器。 – mascoj

回答

0

當您定義std::map時,您可以提供一個Compare函數作爲模板參數。有關更多詳細信息,請參閱the reference

但是,我相信這隻適用於關鍵排序。鍵值排序不會繼承到地圖結構(即,如果值更改會發生什麼?)

+0

mascoj在這裏是正確的;比較功能只能通過密鑰。參考:http://en.cppreference.com/w/cpp/container/map –