我爱Aspx >> VC.Net >> Effective STL: Item 21:永远让比较函数对相同元素返回falseEffective STL: Item 21:永远让比较函数对相同元素返回false
ss=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left>
让我展示些比较酷的东西。构建一个set,比较类型用的是less_equal,然后insert一个10:
set<int, less_equal<int> > s; // s is sorted by “<=”
s.insert(10); // insert the value 10
现在尝试再insert一次10:
s.insert(10);
对于这一个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将计算这个表达式是否为真:
获取系统当前打开的端口(tcp。u..[05-21]
实战DeviceIoControl 之六:访问..[05-21]
By value? Or by reference?[05-21]
一个计算万年历的简单程序[05-21]
一个计算万年历的简单程序[05-21]
获取远程网卡MAC地址。[05-21]
获取远程网卡MAC地址。[05-21]
随机数的检验及发生[05-21]
关于VC代码的编写和调试(二)[05-21]
剖析VC中的文件操作[05-21]