【STL】 map
来源:互联网 发布:超级优化基因液 编辑:程序博客网 时间:2024/06/01 07:39
概述
Map可以插入键值对,并根据键值自动将所有的元素进行排序,根据键值进行元素的检索与删除。
使用
1. 头文件
头文件:
#include <map>
2. 常用构造函数
map<int,string> m1; //创建一个空的mapmap<int,string,cmp> m2; //创建一个自定义排列顺序的mapmap<int,string> m3(m2); //创建一个copy对象m2生成的mapmap<int,string> m4(m1.begin(),m1.end()); //用迭代器区间所指的数据,作为map容器的元素(包括键值和映照数据),创建一个map容器对象。
3. 成员函数
元素的插入
重载[]元素符
显式地为不同键值赋予内容(映照数据),不过这个方法不能检测是否插入成功。
m1[1] = "xchen" //插入一个键值对,对于重载[]的插入操作,如果已存在同key元素,直接替换value
insert函数
- 原型 pair
m1.insert(map<int,string>::value_type(1,"xchen"))//插入一个键值对,对于insert函数的插入操作,如果存在同key元素,不插入
写法二:
m1.insert(std::pair<int,string>(1,"xchen")) //插入一个键值对,对于insert函数的插入操作,如果存在同key元素,不插入
- 原型 void insert(InputIterator first, InputIterator lase) 插入区间中的元素
m2.insert(m1.begin(),m1.end()) //将用迭代器区间所指的数据插入到map中
元素的删除
- 原型 void erase(iterator position)
//删除迭代器所指向的元素 - 原型 size_type erase(const key_type& x)
//删除key值为x的元素 - 原型 void erase(iterator first, iterator last)
//删除区间内的元素
元素的检索
- 原型 size_type count(const key_type& x)
//返回key值为x的元素个数。map不允许key重复,因此只可能返回0或1 - 原型 iterator find(const key_type& x)
//返回key为x的元素的迭代器 - 原型 iterator lower_bound(const key_type &x)
//返回map中第一个大于或等于key的迭代器指针 - 原型 iterator upper_bound(const key_type &x)
//返回map中第一个大于key的迭代器指针
其他
empty() //判断map是否为空
size() //返回map中元素的个数
4. 迭代器
map具有迭代器
5. 改变排列的顺序
map中的默认排序是基于’<’号操作的,当key不是内置类型而是自定义的结构体或其他没有合法’<’操作的数据类型,map的排序就会出现问题,在insert操作时编译出错。
key为内置类型,可以使用默认的排序规则
#include <map>#include <string>int main(){ std::map<int,std::string> m; m.insert(std::pair<int,std::string>(1,"aa")); m.insert(std::pair<int,std::string>(2,"bb")); return 0;}
key为自定义类型,直接默认insert会编译器error
#include <map>#include <string>class Node{public: Node():name("abc"){}; std::string name;};int main(){ std::map<Node, int> m; Node a; Node b; m.insert(std::pair<Node,int>(a,1)); //error m.insert(std::pair<Node,int>(b,1)); //error return 0;}
- 自定义排序——重载运算符<
#include <map>#include <string>class Node{public: Node():name("abc"){}; std::string name;};bool operator<(const Node &n1, const Node &n2){ if(n1.name < n2.name) return true; else return false;}int main(){ std::map<Node, int> m; Node a; Node b; m.insert(std::pair<Node,int>(a,1)); m.insert(std::pair<Node,int>(b,1)); return 0;}
- 自定义排序——仿函数
#include <map>#include <string>class Node{public: Node():name("abc"){}; std::string name;};class m_sort{public: bool operator()(Node const &n1, Node const &n2) { if(n1.name < n2.name) return true; else return false; } };int main(){ std::map<Node, int, m_sort> m; Node a; Node b; m.insert(std::pair<Node,int>(a,1)); m.insert(std::pair<Node,int>(b,1)); return 0;}
底层
红黑树
map就是一棵红黑书,每个结点是pair键值对,以key值排序。
阅读全文
0 0
- STL-map
- stl -map
- stl map
- STL Map
- STL---map
- STL(MAP)
- STL(map)
- STL--map
- STL map
- stl map
- STL map
- STL----map
- stl map
- STL map
- 【STL】map
- STL--map
- STL map
- STL map
- 1.web请求
- Tensorflow体验: 搭建 3D CNN
- 自学python(4)函数概述,参数,可变参数,关键字参数,组合参数,递归函数
- 极简方式理解python闭包操作
- ubuntu17.10 shadowsocks VPS 代理
- 【STL】 map
- 银行编码问题
- 练数成金特训营
- 操作系统之伙伴堆实现
- 运算符优先级
- 关于 cannot open directory '.': Permission denied
- Linux iconv GBK和UTF-8之间的转换
- 安装Samba,实现Ubuntu12.04和win7的文件共享
- 一份xml配置版ssh项目整合精简又典型的使用手册