Effective STL: Item 21:永远让比较函数对相同元素返回false[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 taodm 的 blog

对于这一个insert的调用set必须先要搞明白10是否已经位于其中。 我们知道它已经位于其中,但set可是木头木脑的,它必须执行检查。为了便于弄明白发生了什么,我们将已经在set中的10称为10a,而正试图insert的那个叫10b。

set遍历它的内部数据结构以查找加入10b的位置。 最终,它总要检查10b是否与10a相同。 关联容器对“相同”的定义是equivalence(见item 19)(wq注: equivalence应指“数学相等”,two elements are equal if neither is less than the other,见《the c++ standard library》中文版p82,英文版电子p77;equality指“逻辑等价”,使用operator==(),见《the standard template library》英文电子版p30)因此set测试10b是否数学等值于10a。 当执行这个测试时,它自然是使用set的比较函数。在这一例子里,是operator<=,因为我们指定set的比较函数为less_equal,而less_equal就是operator<=。于是,set将计算这个表达式是否为真:

!(10 a <= 10 b ) && !(10 b <= 10 a )       // test 10 a and 10 b for equivalence

好吧10a10 b都是10,因此10a <= 10b 肯定为真。同样10a <= 10b。上述的表达式简化为

!(true) && !(true)

本文关键:Effective STL,Scott Meyers
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top