读书笔记《effective stl》item21: 总是让比较函数在等值的情况下返回false
因为相等的值从来都不会有前后顺序关系,所以对于相等的值,比较函数应始终返回false。
下面的例子展示了,如果对set使用less equal的比较方法会破坏set的性质。
#include <iostream>
#include <set>
using namespace std;
typedef set<int, less_equal<int>> lessEqualSet;
typedef set<int> normalSet;
void print_set_seq(string name,lessEqualSet les)
{
cout << "\n" << name <<" : ";
for (auto i = les.begin(); i != les.end(); ++i)
cout << *i << " ";
}
void print_set_seq(string name,normalSet les)
{
cout << "\n" << name <<" : ";
for (auto i = les.begin(); i != les.end(); ++i)
cout << *i << " ";
}
int main()
{
//使用less equal的比较方法会破坏set的性质
lessEqualSet s;
s.insert(10);
s.insert(2);
s.insert(10);
print_set_seq("this lessEqualSet contains", s);
cout << "\n";
normalSet ns;
ns.insert(10);
ns.insert(2);
ns.insert(10);
print_set_seq("this normalSet contains", ns);
}
=End=