1.定义名为vis的map容器(int,int)类型
map<int,int>vis;
2.定义名为it的<正向>迭代器(int,int)类型
迭代器就是类似于数组下标的东西
map<int,int>::iterator it;
vis.begin()返回第一个迭代器,vis.end()返回最后一个迭代器的后一个
配套的遍历方法
for(it=vis.begin();it!=vis.end();it++)
3.定义名为iter的<反向>迭代器(int,int)类型
map<int,int>::reverse_iterator iter;
vis.rbegin()返回反向迭代器的第一个(相当于正向迭代器的最后一个),vis.rend()返回反向迭代器的最后一个的后一个(相当于正向迭代器的第一个的前一个)
遍历方法
for(iter=vis.rbegin();iter!=vis.rend();iter++)
4.清空map容器,这个好像queue,stack都没有
vis.clear();
5.用迭代器返回对应的键(key)和值(value)
键值对——vis[key]=value
map<int,int>vis;
map<int,int>::iterator it;
it=vis.begin()
it->first;//返回键
it->second;//返回值
6.find函数:返回键(key)对应的迭代器
map<int,int>::iterator it;
it=find(key);
7.erase删除
vis.erase(it);//it为需要删除的元素的迭代器
vis.erase(key);//key为欲删除的映射的键
8.size()这个好像是个容器都有,返回map中映射的次数
int cnt=vis.size();
9.定义二维数组(套娃)的map
map<ll,map<ll,int> >vis;
就可以把二维数组当键
10.键为结构体的map
#include
using namespace std;
pair<int,int>p;
map<pair<string,int>,int >vis;
int x,y,n;
string s;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s>>y;
vis[{s,y}]++;
}
map<pair<string,int>,int >::iterator it;
for(it=vis.begin();it!=vis.end();it++)
{
printf("%s %d %d\n",it->first.first.c_str(),it->first.second,it->second);
}
return 0;
}
#include
using namespace std;
typedef unsigned long long ll;
map<string,int>m;
int co[100005];
int main()//
{
int n;
string str;
cin>>n;
map<string,int>::iterator it;
for(int i=1;i<=n;i++)
{
cin>>str;
it=m.find(str);//找键为str的
if(it==m.end())//没找到
{
m[str]=i;//存储该字符串的位置
cout<<"OK"<<endl;
}
else//如果找到了
{
int t=it->second;//t为键为str的值,也就是位置
cout<<str<<++co[t]<<endl;
}
}
return 0;
}
#include
using namespace std;
typedef unsigned long long ll;
map<string,int>m;
int co[100005];
int main()//
{
int n;
string str;
cin>>n;
map<string,int>::iterator it;
for(int i=1;i<=n;i++)
{
cin>>str;
it=m.find(str);//找键为str的
if(it==m.end())//没找到
{
m[str]=1;//存储该字符串出现的次数
cout<<"OK"<<endl;
}
else//如果找到了
{
cout<<str<<m[str]++<<endl;//输出键——字符串和值——字符串出现次数并且次数+1
}
}
return 0;
}