首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >相联容器(STL)中的相等性计算

相联容器(STL)中的相等性计算
EN

Stack Overflow用户
提问于 2011-11-22 03:44:20
回答 5查看 1.6K关注 0票数 9

我知道STL关联容器(以及其他正在排序的容器)使用排序标准来测试相等性。

容器的排序标准默认为st::less,因此将对容器进行相等性测试:

代码语言:javascript
运行
复制
if (! (lhs < rhs || rhs < lhs))

或者类似的东西。关于这个我有几个问题..。

首先,这似乎是一种奇怪的低效比较平等的方式-为什么STL要这样做?我原本期望STL容器只需要一个额外的默认参数来表示相等。

我的第二个问题更多地是关于上面的if语句的总体评估。在C++中,有多少语句会被评估(lhs > rhs)是正确的?它会在评估失败的那一侧后停止尝试,从而节省一些效率吗?如果是,那么首先计算表达式的哪个部分?

EN

Stack Overflow用户

发布于 2011-11-22 04:00:11

STL关联容器

您的意思是:标准C++排序关联容器。

我本以为

容器只需要一个额外的默认参数来表示相等。

那会有什么效果呢?在教科书中的红黑树算法中,而不是

代码语言:javascript
运行
复制
if (x < y)
    // ...
else if (y < x)
    // ...
else
    // equality

你就会有

代码语言:javascript
运行
复制
if (x == y)
    // equality
else if (x < y)
    // ...
else
    // y < x

因此,在最坏的情况下,仍然有两个比较。

对此答案的回应是:只需提供一个小于运算符就可以使容器更易于使用,因为不需要维护小于和等于之间的一致性。假设你有一个存储浮点数的程序。有一天,有人决定通过近似比较来替换按位相等的float_equals函数,该函数恰好被一些容器使用,但也被它们的代码使用。如果这个人不更新float_less函数,因为他们的代码不使用该函数,那么您的容器代码就会神秘地崩溃。

(哦,在所示的示例代码中,短路作用一如既往。)

票数 5
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8217588

复制
相关文章

相似问题

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