Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cpp排序中的比较器_C++_Sorting - Fatal编程技术网

C++ cpp排序中的比较器

C++ cpp排序中的比较器,c++,sorting,C++,Sorting,我是cpp新手,我刚刚看到了使用这个[]编写比较器进行排序的新方法,所以这里的用途是什么,因为当我在中定义比较器时 正常情况下,我会得到这样的错误 编辑:错误 /code/Solution.cpp:22:52:错误:非静态成员函数的使用无效 排序(interval.begin()、interval.end()、comp) bool comp(向量&v1,向量&v2){ 返回v1[1]代码>是C++中的代码 lambda < /c>的开始。 你可以读到一个写得很好的关于lambda的答案: 另外

我是cpp新手,我刚刚看到了使用这个
[]
编写比较器进行排序的新方法,所以这里的用途是什么,因为当我在中定义比较器时 正常情况下,我会得到这样的错误

编辑:错误

/code/Solution.cpp:22:52:错误:非静态成员函数的使用无效
排序(interval.begin()、interval.end()、comp)

bool comp(向量&v1,向量&v2){
返回v1[1]
这里的原始和合法方式

class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end(), [](auto &a, auto &b) {
            return a[1] < b[1];
        });
        int prev = INT_MIN;
        int ans = 0;
        for (auto &it : intervals) {
            if (it[0] >= prev) {
                prev = it[1];
            }
            else
                ++ans;
        }
        return ans;
    }
};
类解决方案{
公众:
整数间隔(向量和间隔){
排序(interval.begin()、interval.end()、[](自动&a、自动&b){
返回a[1]=prev){
prev=it[1];
}
其他的
++ans;
}
返回ans;
}
};

<代码> >代码>是C++中的代码<代码> lambda < /c>的开始。

你可以读到一个写得很好的关于lambda的答案:


另外,您还没有提供原始代码,因此我无法指出错误。但是从错误消息来看,您创建的函数comp似乎在一个类中。一种方法是使函数全局化,之后您应该能够轻松地传递它。另一个选择是使函数静态(我认为这是有意义的)。然后可以按如下方式传递排序:
sort(a.begin()、a.end()、a::comp)
在何处创建此函数的类。

您遇到了什么错误?
[]
是为您准备的。您能给我们看一下不工作的代码和您收到的错误消息吗?顺便提一下,您的比较器应该使用常量引用。
[]
这个东西叫做lambda函数,一个未命名的函数对象。我刚刚更新了@ypnosour。
class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end(), [](auto &a, auto &b) {
            return a[1] < b[1];
        });
        int prev = INT_MIN;
        int ans = 0;
        for (auto &it : intervals) {
            if (it[0] >= prev) {
                prev = it[1];
            }
            else
                ++ans;
        }
        return ans;
    }
};