NEFU map和pair

基本知识

map(含pair)的二维表示和迭代器遍历

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

例题

保龄球-map

#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;
}

眼红的Medusa

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_46126537/article/details/104354188