前言
map 是有序的键值对容器 , 元素的键是唯一的 , 值允许重复 。用比较函数 Compare 排序键 。搜索、移除和插入操作拥有对数复杂度 , 即O(logn) 。底层实现为红黑树 。
Map定义需要包含模板类头文件 , 需要关键字和存储对象两个模板参数 。
【Cpp浅析系列-STL之map】这样就定义了一个用int作为索引 , 并拥有相关联的指向string的指针.
#include <map> using namespace std;void init() { map<int, string> m1;//空对象 //自带初值 map<int, string> m2( { {1, "A"}, {3, "C"}, {2, "B"} } ); //默认按照索引less递增输出为 // 1 A // 2 B // 3 C map<int, string,greater<int>> m3( { {1, "A"}, {3, "C"}, {2, "B"} } ); // 3 C // 2 B // 1 A}
有时候为了使用方便 , 可以对模板类以及指针定义成为更简单的名字 。
typedef map<int,string> istrmap;typedef map<int,string>::iterator IT;istrmap map1;IT iter
Map常规操作成员函数C++中文在线手册:
https://zh.cppreference.com/
增加元素总共有三种插入方式 。
void add1() { map<int, string> m( { {1, "A"}, {3, "C"}, {2, "B"} } ); // 当索引是不存在的值 , 成功插入;当索引已经存在 , 则不进行操作 //调用make_pair函数模板 , 好处是构造对象不需要参数 , 用起来更方便 m.insert(pair<int, string>(24, "Z")); m.insert(map<int, string>::value_type(23, "Y")); m.insert(make_pair(1, "Z")); // 索引是原先没有的 , 直接插入;索引已经存在直接修改 m[22] = "X"; m[3] = "X"; // 当索引是不存在的值 , 成功插入;当索引已经存在 , 则不进行操作 m.emplace(pair<int, string>(21, "W")); m.emplace(pair<int, string>(1, "W")); map<int, string>::iterator iter; for (iter = m.begin(); iter != m.end(); iter++) { cout << iter->first << ' ' << iter->second << endl; }}//1 A// 2 B// 3 X// 21 W// 22 X// 23 Y// 24 Z
以上三种用法 , 虽然都可以实现数据的插入 , 但是它们是有区别的:
推荐阅读
- 惠普战系列台式机评测 惠普台式电脑怎么样
- 沈月|盘点“致我们系列”六大主演现状,5人成了流量演员,1人不再拍戏
- 战神|推翻一切的新《战神》系列,续作还能带来惊喜吗?
- 美剧|网飞出品的6部黄暴系列美剧,一口气看完真过瘾
- 生化危机全系列剧情解析 生化危机电影剧情
- 美剧系列剧哪部好看,看看有什么好看的美剧-
- 姐姐|网络美女系列;乃木坂最漂亮的姐姐–卫藤美彩
- 为什么猎鹰系列发展迅速
- 主持人|“重启”系列续作电影《重启之深渊疑冢》今日上线 高能探险精彩升级
- 雅诗兰黛红石榴系列合适年纪是什么? 雅诗兰黛红石榴系列