Table of Contents
1 Item 19: 相等 (Equality) 与等价 (Equivalence)
在 STL 中, 相等 (Equality) 用于 find 算法中,一般经过 \(operator ==\) 来体现。而 等价 (Equivalence) 则常常用于排序,一般用 \(operator <\) 来体现,等价的对象不必定相等,只要他们知足知足下面条件,两者便可视为等价: css
\begin{cases} & !(w1 < w2)\\ & !(w2 < w1) \end{cases}2 Item 20: Specify Comparison Type for Associative containers of pointers
对于存放指针的 Associative Containers 而言,若是咱们不指定排序算法,则默认按照 指针 大小去排,对象指针咱们没法控制,他们在容器中的排列顺序咱们也就没法控制。若是咱们须要指定其排序顺序,需本身指定 Comparison Type,例如: html
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 的函数。 java