}; // operands)
要避免掉入这个陷阱,你所要记住的就是比较函数的返回值指明的是在此函数定义的排序方式下,一个元素是否应该位于另一个之前。相同的元素绝不该一个领先于另一个,所以比较函数总应该为相同的元素返回false。
唉。
我知道你在想什么。你正在想,“当然,这对set和map很有意义,因为这些容器不能容纳复本。但是multiset和multimap怎么样呢?那些容器可以容纳复本,那些容器可能包含副本,因此,如果容器认为两个相同元素对象不等值,我需要注意些什么(so what do i care if the container thinks that two objects of equal value aren’t equivalent?)?它将会把两个都存储进去的,这正是multi系列容器的所要支持的事情。没有问题存在,对吧?”
错。想知道为什么,让我们回过头去看最初的例子,但这次使用的是一个mulitset:
multiset<int, less_equal<int> > s; // s is still sorted by “<=”
s.insert(10); // insert 10 a
s.insert(10); // insert 10 b