map容器

SyEic_L MVP++

map容器简介

  • map是关联容器,存储键值对(key-value),并根据键值自动排序(默认升序)
  • 底层实现是红黑树
  • 每个元素是一个pair,由key和value组成
  • 不允许出现相同的key,若插入相同key的新值,则旧值会被覆盖
  • #include<map>

map/multimap构造

map<T1, T2> mapTT;

multimap<T1, T2> multimapTT;

map<int, char> mapA;

map<string, float> mapB;

插入

  • map.insert(…); //插入元素,返回pair

  • 三种方法:

    • map.insert(pair<int, string>(3, "A")); //通过pair插入

    • map.inert(map<int, string>::value_type(3, "A")); //通过value_type插入

      insert不会覆盖

    • map[3] = "A"; //通过数组形式插入

      先寻找key,如果存在,则修改value(先删除,再添加),如果不存在,则插入

1
2
3
4
5
6
7
8
9
10
11
12
13
class Student{
private:
int id;
string name;
public:
Student(){}
Student(int id, string name): id(id), name(name){}
};

map<int, string> stus;
stus.insert(pair<int, string>(3, "A"));
stus.insert(map<int, string>::value_type(4, "B"));
stus[5] = "C";

迭代

map中每个元素都是一个pair

1
2
3
4
5
for (map<int, string>::iterator it = map.begin(); it != map.end(); it++){
pair<int, string> pr = *it;
int iKey = pr.first;
string iValue = pr.second;
}

获取对应value

  1. 使用[]

    string str = map[3];

    有风险,如果key不存在,则返回默认值(string对应" "

  2. 使用find()函数,成功返回对应的迭代器,失败返回end() 的返回值

    map<int, string>::iterator it = mapS.find(3);

  3. 使用at()函数,如果pair不存在会抛出”out_of_range异常”

    cout << map.at(3) << endl;

  • Title: map容器
  • Author: SyEic_L
  • Created at : 2025-03-15 15:33:30
  • Updated at : 2025-03-15 17:07:11
  • Link: https://blog.syeicl.vip/2025/03/15/map容器/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments