繁体   English   中英

什么是自定义比较器以及如何在 C++ 的排序函数中使用它?

[英]what is custom comparator and how to use it in the sort function in c++?

 vector<vector<int>> reconstructQueue(vector<vector<int>> &people) {
    auto cmp = [](const vector<int> &a, const vector<int> &b) {
        return a[0] > b[0] || (a[0] == b[0] && a[1] < b[1]);
    };
    sort(people.begin(), people.end(), cmp);

嘿伙计们,有人可以向我解释 auto cmp ... 部分以及如何在排序功能中使用它,任何帮助将不胜感激:)

这部分代码是一个lambda 换句话说,一个本地定义的小函数。 您可以搜索此词以获取更多信息。

在排序算法的情况下,您应该传递一个带有两个参数的函数,如果第一个参数小于第二个参数,则返回 true。 为简单起见,您提供了一个替代的比较函数来代替标准operator< aka std::less。 可以使用任何具有operator()对象。

比较器可以通过多种方式实现,例如。 一个 lambda(如你的例子)或一个可调用的结构/类。 只是为了给你一个排序的例子,说一个 std::pair 向量按第二个元素:

struct Comparator
{
    bool operator()(const std::pair<int,int>& lhs, const std::pair<int,int>& rhs)
    {
        return lhs.second < rhs.second;
    }
}
void foo(std::vector<std::pair<int,int> > &v)
{
    std::sort(v.begin(), v.end(), Comparator);
}

或者,您可以使用 lambda 将 foo 编写为:

void foo(std::vector<std::pair<int,int> > &v)
{
    std::sort(v.begin(), v.end(), 
        [](const pair<int, int>& lhs, const pair<int, int>& rhs) 
           {
             return lhs.second < rhs.second; 
           } );
}

您可以通过捕获一些其他数据并将其用于比较来编写更高级的比较。 尝试阅读有关lambdas 的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM