【问题标题】:what is custom comparator and how to use it in the sort function in c++?什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
【发布时间】:2020-05-24 06:27:48
【问题描述】:
 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... 部分以及如何在排序功能中使用它,任何帮助将不胜感激:)

【问题讨论】:

  • Google lambdaslambda 函数 用于 C++。

标签: c++ comparator


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    比较器可以通过多种方式实现,例如。一个 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

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 2011-09-27
      • 2022-11-16
      • 2020-10-12
      相关资源
      最近更新 更多