Effective STL 学习笔记:19 ~ 20
Table of Contents
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 的函数。
(使用许可:署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 。)