我有一个二维 vector 数组vector<vector<int> >
,我需要对其中的 vector 进行排序。所以...我想我会写一个比较两个 vector 的函数,然后使用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;
}
然后我调用了sort函数,该函数不起作用:
sort(vector.begin(),vector.end(), vectorcompare());
我做错了什么?
最佳答案
首先,您的编译错误:
sort(vector.begin(),vector.end(), vectorcompare());
vectorcompare
是函数,而不是类型。也就是说,它不是您可以构造的对象。因此,您无需对其进行()
;您只需按原样传递函数即可:sort(vector.begin(),vector.end(), vectorcompare);
现在,一个更严重的问题:
bool vectorcompare (vector<int> v, vector<int> w)
用
const&
而不是值来获取参数。 std::vector
很大;您不必不必要地复制它们。还有一个更严重的问题:
for(int i=0; i<v.size(); i++){
if(v[i]<w[i]) return 1;
if(v[i]>w[i]) return 0;
}
return 1;
这不构成strict-weak ordering。这提供了小于或等于,这不是严格的弱排序。
std::sort
需要基于严格弱排序进行排序。