Effective STL 学习笔记:19 ~ 20

Effective STL 学习笔记:19 ~ 20

1 Item 19: 相等 (Equality) 与等价 (Equivalence)

在 STL 中, 相等 (Equality) 用于 find 算法中,通常通过 \(operator ==\) 来体现。而 等价 (Equivalence) 则经常用于排序,通常用 \(operator <\) 来体现,等价的对象不一定相等,只要他们满足满足下面条件,二者即可视为等价:

\begin{cases} & !(w1 < w2)\\ & !(w2 < w1) \end{cases}

2 Item 20: Specify Comparison Type for Associative containers of pointers

对于存放指针的 Associative Containers 而言,如果我们不指定排序算法,则默认按照 指针 大小去排,对象指针我们无法控制,他们在容器中的排列顺序我们也就无法控制。如果我们需要指定其排序顺序,需自己指定 Comparison Type,例如:

class StrLessFunctor
{
public:
    StrLessFunctor(){}
    virtual ~StrLessFunctor(){}
    bool operator()(const string* ps1, const string* ps2)
    {
        return *ps1 < *ps2;
    }
};

int main(int argc, char *argv[])
{
    set<string*, StrLessFunctor> ssp;
    ssp.insert(new string("Banana"));
    ssp.insert(new string("Orange"));
    ssp.insert(new string("Apple"));

    for_each(ssp.begin(), ssp.end(), [](string* s){cout << *s << endl;});
    return 0;
}

构造 set 时候指定的第二个模板参试不是一个函数,而是一个类型 (Comparison Type), set 会用该类型来初始化出来一个用于 sort 的函数。

posted @ 2013-11-04 13:55 英超 Views(...) Comments(...) Edit 收藏