概念:
map就是从键(key)到值(value)的映射。因为重载了[]运算符,map像是数组的“高级版”。
例如可以用一个map<string, int> month_name 来表示“月份名字到月份编号”的映射
然后用month_name["July"] = 7 这样的方式来赋值
基本操作函数:
C++ maps是一种关联式容器,包含“关键字/值”对
- begin() 返回指向map头部的迭代器
- clear() 删除所有元素
- count() 返回指定元素出现的次数
- empty() 如果map为空则返回true
- end() 返回指向map末尾的迭代器
- equal_range() 返回特殊条目的迭代器对
- erase() 删除一个元素
- find() 查找一个元素
- get_allocator() 返回map的配置器
- insert() 插入元素
- key_comp() 返回比较元素key的函数
- max_size() 返回可以容纳的最大元素个数
- rbegin() 返回一个指向map尾部的逆向迭代器
- rend() 返回一个指向map头部的逆向迭代器
- size() 返回map中元素的个数
- swap() 交换两个map
- lower_bound() 返回键值>=给定元素的第一个位置
- upper_bound() 返回键值>给定元素的第一个位置
- value_comp() 返回比较元素value的函数
-----------------------------------------------------------------------------------------
map<int,string> a;//声明
-----------------------------------------------------------------------------------------
a.insert(pair<int,string>(2,"bbb"));//第一种插入方式
a.insert(pair<int,string>(2,"222"));//不会覆盖
a.insert(map<int, string>::value_type (1,"aaa"));//第二种插入方式
a.insert(map<int, string>::value_type (1,"111"));//不会覆盖
a[3]="ccc";//第三种插入方式
a[3]="333";//会覆盖
-----------------------------------------------------------------------------------------
int n=a.size();//map的大小
-----------------------------------------------------------------------------------------
map<int, string>::iterator iter1; //迭代器遍历
for(iter1=a.begin();iter1!=a.end();iter1++)//begin和end:第一个、最后一个加一
cout<<iter1->first<<' '<<iter1->second<<endl;//first和second
map<int,string>::reverse_iterator iter2;//反向迭代器遍历
for(iter2=a.rbegin();iter2!=a.rend();iter2++)//rbegin和rend: 最后一个、第一个减一
cout<<iter2->first<<' '<<iter2->second<<endl;//first和second
for(int i=1;i<=n;i++)//数组遍历
cout<<i<<" "<<a[i]<<endl;
cout<<a[2]<<endl;//直接输出
-----------------------------------------------------------------------------------------
iter1=a.find(3);//通过find查找
if(iter1!=a.end())
cout<<"Find, the value is "<<iter1->second<<endl;
else
cout<<"Do not Find"<<endl;
-----------------------------------------------------------------------------------------
//iterator erase(iterator it);//通过一个条目对象删除
//iterator erase(iterator first,iterator last)//删除一个范围
//size_type erase(const Key&key);//通过关键字删除
//clear()就相当于a.erase(a.begin(),a.end());
iter1=a.find(1);
a.erase(iter1);//如果要删除1,用关键字删除
int x=a.erase(1);//如果删除了会返回1,否则返回0
a.erase(a.begin(),a.end()); //用迭代器,成片的删除相当于clear-----------------------------------------------------------------------------------------