基本知识
map 的常用函数
(1)find()和 size()
find(key)是返回键为 key 的映射的迭代器,时间复杂度为 0(log 2 n),n 为 map 中映射的对数。size()用来获得map中映射的对数,时间复杂度为O(1)。
(2)clear()
clear()用来清空 map,时间复杂度为 0(n)。
(3)erase()
erase()可以删除单个元素,也可以删除一个区间内的所有元素。
删除单个元素可以用:erase(it),it为要删除的元素的迭代器,时间复杂度为O(1)。
也可以用:erase(key),key为要删除的映射的键,时间复杂度为O(log2n)。
删除一个区间内的所有元素用:erase(first,last),first为区间的起始迭代器,last为区间的末尾迭代器的下一个地址,也就是左闭右开的区间[first,last),时间复杂度为O(last-first)。
pair 的定义和使用
pair 是“二元结构体”的替代品,将两个元素捆绑在一起,节省编码时间。
pair<typename1,typename2> name
例题
#include <bits/stdc++.h>
using namespace std;
map<int,int>vis;//map数据结构是一种映射,由逗号前映射到逗号后
int main()
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
int x;
scanf("%d",&x);
vis[x]=i;
}
cin>>n;
for(int i=0; i<n; i++)
{
int x;
scanf("%d",&x);
printf("%d\n",vis[x]);
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
map<string,int>vis;//map中前后的数据类型可以是任意的
int main()
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
string x;
int t;
cin>>x>>t;
vis[x]=t;
}
cin>>n;
for(int i=0; i<n; i++)
{
string x;
cin>>x;
printf("%d\n",vis[x]);
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
map<int,int>vis;
int a[100001];//本题的一个坑
int main()
{
int m,n;
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>a[i];
while(m--)
{
int x;
cin>>x;
vis[x]++;
}
for(int i=0;i<n;i++)//map有自动排序功能,按第一元素从小到大
{
if(vis[a[i]]==1)
cout<<a[i]<<" ";
}
return 0;
}