我有一个二维向量数组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;
}
然后我调用sort函数,它不起作用:
sort(vector.begin(),vector.end(), vectorcompare());
我做错了什么?
答案 0 :(得分:12)
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
需要根据严格弱的排序进行排序。
答案 1 :(得分:1)
您可能不需要编写自己的比较功能。 std::vector
已定义operator<
,其执行等效于std::lexicographical_compare
。您是否尝试过在std::sort
上致电vector<vector>
?
注意:添加我的评论作为此答案,因为用户发现它有用。
答案 2 :(得分:0)
请查看this site, it has a nice example。
在您的情况下,您可以像这样致电std::sort
:
sort(vector.begin(),vector.end(), vectorcompare);