c++标准模板库-map的常见用法
mapmap的常见用法1.map的初始化map<key,value> mp;映射前的类型键key,映射后的类型值value(1)整型到整型的映射map<int,int> mp;(2)字符串到整型的映射,必须使用string而不能使用char.若是字符可以用charmap<string,int> mp;(3)key和value也可以是STL容器,eg:将一个vec
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() 清空所有元素
更多推荐
所有评论(0)