Cpp浅析系列-STL之map

前言
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 iterMap常规操作成员函数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以上三种用法 , 虽然都可以实现数据的插入 , 但是它们是有区别的:


推荐阅读