如何通过 Pair 的第二个元素对向量对进行高效排序
本文解决了基于对的向量对向量进行排序的问题每对的第二个元素按升序排列。虽然为此任务创建自定义函数对象是一个可行的解决方案,但还有利用现有 STL 组件和 std::less 的替代方法。
将 std::sort 与自定义比较器一起使用
一种方法是使用自定义比较器作为 std::sort 的可选第三个参数。这个自定义比较器称为 sort_pred,定义如下:
struct sort_pred { bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; } };
要使用此比较器,只需将其传递给 std::sort:
std::sort(v.begin(), v.end(), sort_pred());
使用 C 11 Lambda
如果使用 C 11 编译器,您可以利用lambda 代替自定义比较器:
std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; });
使用通用模板进行对排序
为了获得更大的灵活性和可重用性,您可以创建一个名为 sort_pair_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>());
以上是如何按第二个元素对向量对进行有效排序?的详细内容。更多信息请关注PHP中文网其他相关文章!