gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:13:47 27 4
gpt4 key购买 nike

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

关于c++ - 如何为 std::sort() 编写用户定义的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9351587/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com