在学习C++的map的时候,写了一段代码
|
在网上疯狂搜索了一阵之后,发现一篇博文(http://blog.csdn.net/xie376450483/article/details/6329408)回答了出错的原因.这篇博文中提到两点:
1. "map内部存储机制实际是以红黑树为基础,红黑树在插入节点时,必须依照大小比对之后在一个合适的位置上执行插入动作。所以作为关键字,起码必须有“<”这个比较操作符。"
2. 由于STL中对less仿函数的定义为
- template <class _Tp>
- struct less : public binary_function<_Tp,_Tp,bool>
- {
- bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; }
- };
less调用这个比较符时,它都是以const方式传入,不可能再以非const方式调用.故不能使用定义成员函数bool operator < (const struct st &rs) 而必须以友联函数[friend bool operator < (const A& a,const A& b)]代替函数内部定义的比较操作符.
在给类A加了一个operator<方法
- friend bool operator < (const A& a,const A& b)
- {
- return true;
- }
后,再次编译就通过了.
其实从STL中map的定义也能看出端倪来,map的定义如下
- template <
- class Key,
- class Type,
- class Traits = less<Key>,
- class Allocator=allocator<pair <const Key, Type> >
- >
- class map
要有比较谓词,而且默认用“<”
转载于:https://blog.51cto.com/darksun/1144098