欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Map常用操作——插入、查找、删除、遍历

程序员文章站 2022-06-20 21:03:22
...

Map常用操作——插入、查找、删除、遍历

1. 插入

四种插入方法
方法一:pair

map<int, int> mp;
mp.insert(pair<int,int>(1, 2));

方法二:make_pair

map<int, int> mp;
mp.insert(make_pair<int,int>(2,3));

方法三:value_type

map<int, int> mp;
mp.insert(map<int, int>::value_type(3,4));

方法四:[]

map<int, int> mp;
mp[4] = 5;

四种方法异同:
前三种方法当出现重复键时,编译器会报错,有的可能不会报错但是会忽视重复键插入,而第四种方法,当键重复时,会覆盖掉之前的键值对。

2. 查找

方法一:[]

map<int, int> mp;
cout << mp[1] << endl;
Mp[1] = 2;
cout << mp[1] << endl;

第一句输出为0,第二句输出为2.
下标索引的机制:用下标访问map中不存在的元素时,将导致向map中添加该下标所指向的新元素,其值会根据类型默认值或默认构造函数进行初始化。
方法二:map.at()

map<int, int> mp;
map[1] = 0;
cout << mp.at(1) << endl;
cout << mp.at(2) << endl;

第一句输出为0,第二句抛出异常。.
at函数机制:存在则正常输出,不存在返回map.end().
方法三:count()和find()

map<int,int> mp;
    mp[1] = 1;
     map<int, int>::iterator iter=mp.find(1);
     if(iter != mp.end()){
          cout<<"Found, the value is "<<iter->second<<endl;
     }else{
          cout<<"Do not found"<<endl;
    }

map::find(k),如果map中存在按k索引的元素,则返回指向该元素的iterator;如果不存在则返回end()。
map::count(k),返回map中k出现的次数,为0当然就表示不存在,只能用来判断k是否存在。

3. 删除

map定义了四个删除元素的方法

iterator erase(iterator it); //通过一个条目对象删除
iterator erase(iterator first, iterator last);//删除范围[first, last)内对象
size_type erase(const Key& key); //通过关键字删除
map的清空函数clear()就相当于 Map.erase(Map.begin(), Map.end());

4. 遍历

前序遍历 [ begin(), end() )

map<int, int> mp;
for (map<int, int>::iterator iter = mp.begin(); iter != mp.end(); iter ++)
    cout << mp->first << " " << mp->second << endl;

后序遍历 [ rbegin(), rend() )

map<int,string> mp;
for (map<int, int>::iterator iter = mp.rbegin(); iter != mp.rend(); iter ++)
    cout << mp->first << " " << mp->second << endl;