qq_笑_17
使用c ++ 14,由于lambda现在可以有类型的参数,因此最好的解决方案非常容易编写auto。这是我目前最喜欢的解决方案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