首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当比较函数使用大于(>)而不是大于或等于(>=)时,为什么std::排序工作呢?

当比较函数使用大于(>)而不是大于或等于(>=)时,为什么std::排序工作呢?
EN

Stack Overflow用户
提问于 2022-04-23 08:03:42
回答 1查看 194关注 0票数 3

在WIN32上,2022。当我定义包含一百零零的vector<int>并用下面的代码对其进行排序时,会抛出一个异常“无效比较器”。

代码语言:javascript
复制
vector<int> v(100, 0);
sort(v.begin(), v.end(), [](const int& a, const int& b)
    {
        return a >= b;
    });

但是,如果我使用return a > b,它将执行得很好。为什么会这样呢?

EN

回答 1

Stack Overflow用户

发布于 2022-04-23 11:33:56

问题是指您提供的比较器(也称为比较函数)没有实现严格的弱排序,因此违反了,这是导致未定义行为std::sort的先决条件。

来自std::sort

comp -比较函数对象(即满足比较要求的对象),如果第一个参数小于(即在第二个参数之前排序),则返回​true。

来自比较

函数调用操作的返回值应用于一个类型令人满意的比较对象,当上下文转换为bool时,如果调用的第一个参数出现在由该类型诱导的严格弱排序关系中的第二个参数之前,则为true,否则为false。

这基本上意味着我们提供的比较器函数Compare不应该对两个表达式true进行计算:Compare(x, y)Compare(y, x),其中xy是一些参数。否则,比较器不服从严格的弱序.

要解决这个问题,您应该将>=替换为>

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71977913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档