From http://www.cplusplus.com/reference/map/map/operators/我注意到:
“请注意,这些操作都没有考虑任一容器的内部比较对象,而是直接比较(value_type 类型)元素。”
这就是说重载运算符“Compare在其声明中
(参考http://www.cplusplus.com/reference/map/map/)
std::map
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less<Key>, // map::key_compare
class Alloc = allocator<pair<const Key,T> > // map::allocator_type
> class map;
哪里的Compare
is
比较:以两个元素键作为参数的二元谓词
并返回一个bool
。表达方式comp(a,b)
, where comp
是一个对象
这种类型和a
and b
是键值,如果满足则返回 truea
是
之前考虑去b
在严格的弱排序函数中
定义。地图对象使用此表达式来确定
容器中元素的顺序以及是否有两个元素
键是等效的(通过反身比较它们:它们是
等价如果!comp(a,b) && !comp(b,a))
。地图中没有两个元素
容器可以有相同的键。这可以是函数指针或
一个函数对象(参见构造函数的示例)。这默认为less<T>
,其返回值与应用小于运算符相同(a<b)
。别名为成员类型map::key_compare
.
我不太明白,为什么不直接使用Compare
在“
Compare
is for comparing key_type
. The map's <
operator is actually comparing mapped_type
value_type
, not key_type
, so Compare
would not be applicable. value_type
is the pair of key_type
and mapped_type
.
不过说实话,我认为给地图一个operator<
首先是操作符重载过度的情况。说一张地图“小于”另一张地图的含义并不是很明显。如果你想lexigraphical_compare
,我建议直接调用它,或者至少在代码中记录地图比较的含义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)