map是STL的一个关联容器,它提供一对一的hash
Key-value:键值匹对
Map中key不可重复,value可重复
内部实现:红黑树
键值可以是自定义的数据
Map<type,type>名
map内部元素有序(根据key来堆大项)
插入方式:主分两种
Map<int,string>map1;
1.array式
map1[int]=string
map1[1]=”love”
2.pair式
Map1.insert(pair<int ,string>(1,”love”)
或者
pair<int,string>p;
cin>>p.first>>p.second;
map1.insert§;
两种方式存在区别:
array式当map中已经存在要插入元素的键,则在加入会覆盖原来的value
Pair式 则会插入不成功,当是系统不会报错,保持map原有元素,不会发生覆盖。(傻瓜式解释。。)
注意的是:
Map有内置函数find
参数是key
返回的是迭代器(所找到元素的)
#include<iostream>
#include<map>
#include<string>
#include<iterator>
using namespace std;
map<int,string>map1;
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
pair<int,string>p;
cin>>p.first>>p.second;
map1.insert(p);
}
map<int,string>::iterator iter=map1.begin();
for(iter;iter!=map1.end();iter++)
cout<<iter->first<<" "<<iter->second<<endl;
int a;
cin>>a;
if(map1.find(a)!=map1.end())cout<<"find";
return 0;
}
Multimap:容器支持存在键重复的元素,所以就不支持索引的方式来添加元素了
此时当存在重复键时,对键用find函数时
缺点:容器中可能存在键值都相同的元素。
code:
#include<iostream>
#include<map>
#include<iterator>
using namespace std;
int n;
multimap<int,int>map1;
multimap<int,int>::iterator iter;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
pair<int,int>p;
cin>>p.first>>p.second;
map1.insert(p);
}
iter=map1.begin();
for(iter;iter!=map1.end();iter++)
cout<<iter->first<<" "<<iter->second<<endl;
return 0;
}