Map

MAP

目录

  1. 什么是 map
  2. map 的用法
  3. map 应用
  4. map 再应用
  5. map 水题

1. 什么是 map

map 中的键值对是 key-value 的形式,比如:每个身份证号对应一个人名(反过来不成立),其中,身份证号就是 key,人名便是 value,是单项的关系,可以与 hash 作类比。

2. map 的用法

头文件

需使用头文件:

#include<map>

定义

map 的定义格式如下:

map<key,value>m;

即定义了一个下标 key 类型,存储着 value 类型的map m。

调用

直接调用m[key],会返回 key 所对应的 value。

遍历

代码如下:

map<key,value>::iterator i;
for(i=m.begin();i!=m.end;i++)
{
}

此时调用变为i->second

3. map 应用

题目描述

每个人都有一个电话号码(例如XXX的电话为10086),现在给定 nn 个人的名字和电话号码,以及 qq 次询问,问你XXX的电话是多少。

样例输入

3
xiaoZ 11111111111
xiaoA 12222222222
xiaoPig 11451419198
1
xiaoPig

样例输出

11451419198

数据范围

n,q105,namei100,n,q\le10^5,|name_i|\le100, 电话长度 =11=11

正解

定义map:map<string,long long>m;
每一次输入名字和电话,直接写成m[name]=phonenumber
最后询问时直接调用便可。

4. map 再应用

题目

题目传送门

正解

看着很恐怖,其实水的很。
前面出现,再后面出现,其实前面的没用。
queue 不支持在中间删除插入,且循环复杂度为 O(n)O(n)
考虑从后往前推。
越靠后面出现,输出也会越早。
那么推的时候,只要后面没出现,输出便可以。
AC code:

#include<bits/stdc++.h>
using namespace std;
map<string,bool>m;
string a[200001];
signed main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=n;i>=1;i--)
	{
		if(m[a[i]]==1) continue;
		else cout<<a[i]<<endl;
		m[a[i]]=1;
	}
	return 0;
}

5. map 水题

  1. 【模板】字符串哈希(因为是哈希的模板,所以是第 00 个)
  2. 贪婪的送礼者
  3. 密文搜索
posted @ 2023-07-24 15:27  sLMxf  阅读(20)  评论(0)    收藏  举报  来源