如何为std :: sort()编写用户定义的比较

use*_*520 1 c++ sorting compare

我有一个二维矢量数组vector<vector<int> >,我需要按顺序对其中的向量进行排序.所以......我想我会编写一个比较两个向量然后使用的函数sort()

但是我无法理解,然后无法找到适当的语法.这是我的比较功能:

bool vectorcompare (vector<int> v, vector<int> w){ 
    for(int i=0; i<v.size(); i++){
        if(v[i]<w[i]) return 1;
        if(v[i]>w[i]) return 0;
    }
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

然后我调用sort函数,它不起作用:

sort(vector.begin(),vector.end(), vectorcompare());
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Nic*_*las 12

首先,你的编译错误:

sort(vector.begin(),vector.end(), vectorcompare());
Run Code Online (Sandbox Code Playgroud)

vectorcompare是一种功能,而不是一种类型.也就是说,它不是你可以构建的对象.所以你不要这样做(); 你只需按原样传递函数:

sort(vector.begin(),vector.end(), vectorcompare);
Run Code Online (Sandbox Code Playgroud)

现在,更糟糕的问题:

bool vectorcompare (vector<int> v, vector<int> w)
Run Code Online (Sandbox Code Playgroud)

获取参数const&,而不是值.std::vectors很大; 你不应该不必要地复制它们.

还有一个更糟糕的问题:

for(int i=0; i<v.size(); i++){
    if(v[i]<w[i]) return 1;
    if(v[i]>w[i]) return 0;
}
return 1;
Run Code Online (Sandbox Code Playgroud)

这不构成严格弱的排序.这提供小于或等于,这不是严格弱的排序.std::sort需要基于严格弱的排序进行排序.