【发布时间】:2009-08-06 14:44:52
【问题描述】:
来自 cplusplus.com:
template < class Key, class Compare = less<Key>,
class Allocator = allocator<Key> > class set;
"Compare:比较类:接受两个与容器元素相同类型的参数并返回一个bool的类。表达式comp(a,b),其中comp是这个比较类的一个对象,a和b是容器的元素,如果在严格的弱排序操作中将 a 放置在比 b 更早的位置,则应返回 true。这可以是实现函数调用运算符的类或指向函数的指针(参见构造函数示例)。默认为 less,它返回的结果与应用小于运算符 (a<b) 相同。
set 对象使用此表达式来确定元素在容器中的位置。集合容器中的所有元素始终按照此规则排序。”
鉴于比较类用于决定两个对象中哪个“更小”或“更少”,该类如何检查两个元素是否相等(例如,防止插入相同的元素两次)?
我可以在这里想象两种方法:一种是在后台调用 (a == b),但不提供覆盖此比较的选项(与默认的 less<Key> 一样)似乎不太 STL-对我来说。另一个是假设 (a == b) == !(a
那么它到底是怎么做的呢?
【问题讨论】: