标签:
map的键值的类型
-可以是自定的类型(对象、函数指针、智能指针、。。。)
-但是有副作用-当自己定义的类型键值无法用系统自己提供的 < 或者 > 进行排序的时候,会出现各种问题
-所以需要自己定义比较器来进行处理
解决:
-如果键值是对象类型
-可以自己在类中对 < 或者 > 运算符进行重载
-不需要对==进行重载
-因为元素的排序是根据<,和> 进行比较的
eg:
-a > b 则 b <= a;
-这边有点疑问。。待补充。。。。
class Key{ public: Key(int ival):_Ival(ival){} int _Ival; }; bool operator<(const Key& left, const Key& right){ //return left._Ival < right._Ival; return false; //如果总是return false, aMap.size()就总是1.任何数据 进来都是/a >= b && b >= a故总是相等. }
-当我们无法对类进行修改的时候,可以在类外用比较函数进行处理
-这边有点疑问。。待补充。。。。
eg:
inline bool compare(const Sale_item& lhs, const Sale_item& rhs) { return lhs.book <rhs.book; } typedef bool (*Comp)(const Sale_item&, const Sale_item&); std::multiset <Sale_item, Comp > items(compare);
参考:
-http://www.zhihu.com/question/34290683?sort=created
-http://blog.csdn.net/ultrahook/article/details/8146529
-http://bbs.csdn.net/topics/360183804
标签:
原文地址:http://www.cnblogs.com/Neo-Lc/p/4947963.html