C++: Strict Weak Ordering
想讲讲C++ STL中各种算法都用到的一个概念,Strict Weak Ordering。 举个例子,来说明为什么写C++要知道这个东西。 假如你定义了一个类型 MyType ,而且这个类型是可比的(comparable,定义了 < 这个operator): struct MyType { int first; int second; MyType(int f,int s):first(f),second(s){} MyType(){ .... } bool operator < ( const MyType & b){ return a.first < b.first; } }; 现在一个 vector 里装着很多这种类型的对象,你想对这个 vector 排序: vector<MyType> vec { obj1,obj2,obj3 }; std::sort(vec.begin(),vec.end()); 之所以能用 std::sort() 来对任意类型排序,而不用给 std::sort() 传递规则,是因为 std::sort() 是默认采用 < 这个operator来排序的。 现在问题来了,只有 < 这个operator怎么知道两个对象是否相等? 简单来说就是,假如 !(a<b) && !(b<a) ,那么 a==b 但是,假如我没有为 MyType 定义 < 这个