根据《Effective STL》条款21中的例子,建立一个比较类型为 less_equal 的 set 容器:
set< int, less_equal<int> > s;
然后连续插入两个10:
s.insert(10); // 10a s.insert(10); // 10b
会得到什么?
在debug下,可能会给出一个assert报比较符号不合法,第二次插入失败,但在release下,这个动作很可能是未定义的,而通常的结果是,set中存在了两个键值同为10的项,也就是说,set被悄声无息地变成了multiset!太可怕了!
所以,为正确的容器挑选正确的比较函数,很重要。用好 STL 其实并不容易,用错了不仅执行效率狂低,而且还可能出现这些难以想象的意外……
