STL—map之总结
来源:互联网 发布:nginx多ip域名绑定 编辑:程序博客网 时间:2024/04/29 14:28
一.map的原型
1.map
template <class _Key, class _Tp, class _Compare, class _Alloc>
class map {...}
2.multimap
template <class _Key, class _Tp, class _Compare, class _Alloc>
class multimap {...}
由此可以看出我们可以根据需要自定义compare Function
二.自定义compare Function
2.1重载<操作运算符
2.1.1以成员函数方式去重载
2.2.2以友元函数方式去重载
2.2.3以函数对象的方式去定义
注意点:在自定义比较函数时,不能丢失const
三.例子
1.map
template <class _Key, class _Tp, class _Compare, class _Alloc>
class map {...}
2.multimap
template <class _Key, class _Tp, class _Compare, class _Alloc>
class multimap {...}
由此可以看出我们可以根据需要自定义compare Function
二.自定义compare Function
2.1重载<操作运算符
2.1.1以成员函数方式去重载
inline bool operator<(const myClass &_myclass) const {if(id != _myclass.id)return id < _myclass.id;elsereturn name < _myclass.name;}
2.2.2以友元函数方式去重载
bool operator<(const myClass &m1, const myClass &m2){if(m1.getID() != m2.getID())return m1.getID() < m2.getID();elsereturn m1.getString() < m2.getString();}
2.2.3以函数对象的方式去定义
struct myCompare{bool operator()(const myClass &m1, const myClass &m2){if(m1.getID() != m2.getID())return m1.getID() < m2.getID();elsereturn m1.getString() < m2.getString();}};
注意点:在自定义比较函数时,不能丢失const
三.例子
代码如下;
#include <iostream>#include <map>//#include <unordered_map>#include <string>#include <algorithm>using std::cin;using std::cout;using std::endl;using std::string;using std::sort;using std::map;//using std::unordered_map;using std::string;const int N = 1003;class myClass{private:string name;int id;public:string getString() const { return name; }int getID() const {return id; }myClass(string _name, int _id):name(_name), id(_id) {}//重载<操作运算符的时候不能丢掉const/*inline bool operator<(const myClass &_myclass) const {if(id != _myclass.id)return id < _myclass.id;elsereturn name < _myclass.name;}*/inline friend bool operator<(const myClass &m1, const myClass &m2);};//重载<操作运算符的时候不能丢掉constbool operator<(const myClass &m1, const myClass &m2){if(m1.getID() != m2.getID())return m1.getID() < m2.getID();elsereturn m1.getString() < m2.getString();}struct myCompare{bool operator()(const myClass &m1, const myClass &m2){if(m1.getID() != m2.getID())return m1.getID() < m2.getID();elsereturn m1.getString() < m2.getString();}};int main(){freopen("./output.txt", "w", stdout);map<myClass, int, myCompare> cMap;for(int i = 0; i < N; i++){string tName = "cjw";char ss[10];string tmp;sprintf(ss, "%d", i);tmp = ss;tName = tName + tmp;myClass tClass(tName, i);cMap[tClass] = i * 2;}for(map<myClass, int, myCompare>::iterator ite = cMap.begin(); ite != cMap.end(); ite++){cout << ite->first.getString() << " " << ite->first.getID() << " " << ite->second << endl;}}
- STL—map之总结
- 【STL之map总结】
- C++的STL进一步总结之map
- STL之map和multimap总结
- STL之map和multimap总结
- 【STL】STL之map
- STL-MAP使用方法总结
- stl map 总结
- stl map 总结
- stl map 总结
- C++ STL map 总结
- STL - map学习总结
- STL map 的总结
- 【STL】STL容器之map
- STL总结之set/multiset和map/multimap
- 【C++】STL常用容器总结之八:映射map
- C++——STL之Map
- STL之map
- 个人对java的看法!
- 不可小觑的Web开发编码规范
- NYIST分苹果
- Objective-C runtime之消息(二)
- java的个人总结!
- STL—map之总结
- Objective-C runtime之消息转发机制(三)
- [siggraph13]《巫师3》角色渲染
- html + javascript 自学笔记
- java的认证!
- 手机支付宝的充值与转账功能
- 在 Android 模拟器中启用摄像头支持
- Map 值增加的最高效的方法 —— 只一次搜索键(节选)
- LeetCode Rotate List 分析解答