編輯:使用C++ 14,最好的解決方案是很容易寫的感謝到現在可以具有auto
類型的參數的lambda。 這是我目前最喜歡的解決方案
std::sort(v.begin(), v.end(), [](auto &left, auto &right) {
return left.second < right.second;
});
只需使用一個自定義的比較(這是一個可選的第三個參數來std::sort
)
struct sort_pred {
bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) {
return left.second < right.second;
}
};
std::sort(v.begin(), v.end(), sort_pred());
如果您使用的是C++編譯器11 ,你可以使用lambdas寫下相同的文字:
std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) {
return left.second < right.second;
});
編輯:響應您的編輯你的問題,這裏的一些想法... 如果你真的想勇於創新,能夠重複使用這個概念有很多,只是做一個模板:
template <class T1, class T2, class Pred = std::less<T2> >
struct sort_pair_second {
bool operator()(const std::pair<T1,T2>&left, const std::pair<T1,T2>&right) {
Pred p;
return p(left.second, right.second);
}
};
那麼你也可以這樣做:
std::sort(v.begin(), v.end(), sort_pair_second<int, int>());
甚至
std::sort(v.begin(), v.end(), sort_pair_second<int, int, std::greater<int> >());
雖然說實話,這是所有有點矯枉過正,只寫了3線功能,並用它做:-P
C++沒有lamdas,所以你不能做到你想要的,你需要創建一個單獨的函數/仿函數。這可以是一個單線,所以它真的不應該是一個大問題。 – 2008-11-11 03:44:43
這裏是一個例子:
[std :: sort in pairs of pairs](http://www.codeguru.com/forum/archive/index.php/t-325645.html) – LeppyR64 2008-11-11 02:46:48