STL模板_multimap_智能指针作为键值

时间:2023-03-08 18:07:42

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.****.net/ultrahook/article/details/8146529

  -http://bbs.****.net/topics/360183804