map

map

1.map 中元素有序无重复
2.map是关联容器
关联容器与顺序容器的区别
(1)关联容器:元素是按照关键字来保存和访问
(2)顺序容器:元素是按照在容器中的位置保存和访问
3.map在底层通常用二叉搜索树实现
4.map的本质是映射,键值对一一对应

map的常见用法

一.map的初始化
1.默认构造

map<key,value> mp;

映射前的类型键key,映射后的类型值value
(1)整型到整型的映射

map<int,int> mp;

(2)字符串到整型的映射,必须使用string而不能使用char.若是字符可以用char

map<string,int> mp;

(3)key和value也可以是STL容器,eg:将一个vector容器映射到一个字符串;

map<vector,string> mp;

2.范围构造

map<key, value> m(iterator first, iterator last);

将迭代器[frist, last)范围内的元素填入map中

3.拷贝构造

map<key, value> m(cosnt map& m);

用m构造map

二.访问
1.以键访问值

map<char,int> mp;
mp[‘c’]=520;
mp[‘c’]=521; //520会被覆盖

2.以迭代器访问

map<key,value>::iterator it;

it->first访问键,it->second访问值

map<char,int> mp;
mp[‘a’]=10;
mp[‘b’]=20;
mp[‘c’]=30;
map<char,int>::iterator it;
for(it=mp.begin();it!=mp.end();it++)
{
cout<< it->first<<" "<< it->second;
}

3.反向迭代器

map<char,int> ::reverse_iterator Itr;
Itr = mp.rbegin();
While(Itr != mp.rend())
{
Itr++;
}

三.查找
1.find(key)

返回一个迭代器:
若key存在,则返回key所在位置的迭代器
若key不存在,则返回mp.end()

#include < map>
#include < iostream>
using namespace std;
int main(){
map<int,int> grade;
grade[1] = 100;
grade[2] =99;
grade[3] = 98;
map<int, int>::iterator it=grade.find(1);
if(it!= grade.end()){
cout<<"Found, the value is "<< it->second<<endl;
}
return 0;
}

2.count函数
用来判断关键字是否出现,但无法定位数据出现的位置。返回值0或1,当要判断的key出现,返回1

四.插入
1.mp[key]=value;

mp[‘a’]=10;

可以覆盖以前该关键字对应的值

2.insert函数

mp.insert(pair<int , string>(22 ,“zhang zan”));
mp.insert(make_pair<int , string>(22 ,“zhang zan”));

(1)Insert不能覆盖,如果键已经存在,则插入失败
(2)make_pair函数,由传递给它的两个实参生成一个新的pair对象,所以如果键已经存在,则会更新键对应的值。

用pair来获得insert执行后是否插入成功

map<int, string> mapStudent;
pair<map<int, string>::iterator, bool> Insert_Pair;
Insert_Pair = mapStudent.insert(pair<int, string>(1, “student_one”));
If(Insert_Pair.second == true)
{
cout<<” Successfully”<<endl;
}
else
{
cout<<” Failure”<<endl;
}

五.删除
1.移除迭代器it所指向的元素

erase(it);

map<int, int>::iterator it=grade.begin();
for(it;it!=grade.end();it++)
{
if((*it).second==99)
{
grade.erase(it);
}
}

2.移除迭代器范围为[0,5)的元素序列

erase(it,it+5);

3.移除key和对应value,然后返回所移除元素的个数。
只能返回0或1,若返回0,则表明元素不在容器中;

六.判断两个map中键值是否相等
1.已知两个map中键相等,如何判断其值是否相等

bool judge(map<string,int> &left,map<string,int> &right)
{
map<string,int>::iterator it;
for(it=left.begin();it!=left.end();it++)
{
if(right[it->first]!=it->second)
{
return false;
}
}
return true;
}

七.其他
mp.size() 返回元素数目
mp.empty() 判断是否为空
mp.clear() 清空所有元素

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐