stl容器----------------map

map是STL的一个关联容器,它提供一对一的数据处理能力. 也就是内部存储的有两个部分,一个是固定的键值(从开始插入后就不

会再改变的值)也可以称为关键字另外一个是记录该关键字的状态(大小,翻译,对应关系).所以map的作用很广泛,生活中一一对

应的东西太多了,比如你的身份证号和你,比如你需要记录很多不同东西的数量,还有很多很多. 而且map还是有序的.应用场景相

当广泛. 但是map也是有不能存储的数据 只要该数据不能够互相比较大小那么就不能使用map存储. 那么为什么呢?

这里是由于map容器底层是使用搜索树来存储数据的,所以你在构建搜索树的时候需要不停的比较大小,这就是原因.而这里使用的搜

索树是较为成熟的红黑树,正因为底层是红黑色所以map的查找,删除,插入的效率都很高。

上面的看不懂也没关系,具体来讲一讲怎么使用这个容器

这是天梯赛练习题里的一道题

https://pintia.cn/problem-sets/994805046380707840/problems/994805130426171392

L1-011 A-B (20 分)

本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。

输入格式:

输入在2行中先后给出字符串A和B。两字符串的长度都不超过10​4​​,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。

输出格式:

在一行中打印出A−B的结果字符串。

输入样例:

I love GPLT!  It's a fun game!
aeiou

输出样例:

I lv GPLT!  It's  fn gm!

 拿到这个题目我第一时间想到的做法是將字符串B中的每个字符与字符串A中的每个字符进行比较,若一致则删去字符串A中的字

符。但是每个字符串的长度都能达到数百位,最坏的情况下我们可能需要进行一百万次的比较,时间复杂度为O(n^2). 

而使用map容器可以大大降低时间复杂度,原因上面已经说过了

 

AC代码如下

#include <bits/stdc++.h> 
using namespace std;
int main()
{
	map<char,int> mp;
	string A,B;
	getline(cin,A);
	getline(cin,B);
	int l1=A.size();
	int l2=B.size();
	for(int i=0;i<l2;i++)//将B映射 
		mp[B[i]]++;
	for(int i=0;i<=l1;i++)
		if(!mp[A[i]])
			printf("%c",A[i]);
	printf("\n");

	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42105529/article/details/88064395