首页 > 后端开发 > C++ > 如何在 C 中根据第二个元素对向量对进行排序?

如何在 C 中根据第二个元素对向量对进行排序?

Linda Hamilton
发布: 2024-12-16 21:31:12
原创
1007 人浏览过

How to Sort a Vector of Pairs in C   Based on the Second Element?

根据第二个元素对向量对进行排序

在 C 中,我们可能会遇到需要根据第二个元素对向量对进行排序的情况。让我们探索如何使用提供的信息轻松实现此目的。

提供的对向量 vec 保存整数对,我们希望根据每对的第二个元素按升序对它进行排序。在不求助于自定义函数对象的情况下,让我们利用标准模板库 (STL) 和 std::less 来完成这项工作。

使用 C 14 Lambda

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板