TAG / stl

乱用 STL 是地狱

根据《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 其实并不容易,用错了不仅执行效率狂低,而且还可能出现这些难以想象的意外……