我有一个二维 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需要基于严格弱排序进行排序。

10-08 08:17
查看更多