在 C 中,我们可能会遇到需要根据第二个元素对向量对进行排序的情况。让我们探索如何使用提供的信息轻松实现此目的。
提供的对向量 vec 保存整数对,我们希望根据每对的第二个元素按升序对它进行排序。在不求助于自定义函数对象的情况下,让我们利用标准模板库 (STL) 和 std::less 来完成这项工作。
C 14 中最简单的解决方案利用 lambda带参数类型推断:
std::sort(vec.begin(), vec.end(), [](auto &left, auto &right) { return left.second < right.second; });
这个匿名 lambda 捕获左右对并返回 true if左边的第二个元素小于右边的第二个元素,有效地按升序对向量进行排序。
如果 lambda 不是一个选项,我们可以定义一个自定义比较器来处理排序:
struct sort_pred { bool operator()(const std::pair<int, int> &left, const std::pair<int, int> &right) { return left.second < right.second; } }; std::sort(vec.begin(), vec.end(), sort_pred());
sort_pred 结构实现比较运算符,比较两对的第二个元素并返回如果左侧对的元素小于右侧的元素,则为 true。
要概括比较器并重用它进行排序,我们可以创建一个模板:
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(vec.begin(), vec.end(), sort_pair_second<int, int>());
通过提供模板参数,我们指定对元素的类型,甚至可以使用不同的谓词(如降序的 std::greater)来自定义比较。
以上是如何在 C 中根据第二个元素对向量对进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!