stl-----map去重,排序,计数

2023-06-09,,

一、map

erase()删除函数:可以迭代器删除,关键字删除,成片删除。

例:1、iter=mapStu.find(1);

  mapStu.erase(iter);

  2、int n = mapStu.erase(1);//删除了会返回1,否则返回0;

  3、mapStu.erase(mapStu.begin(),mapStu.end());

equal_range函数返回一个pair,pair里面的第一个变量是lower_bound返回的迭代器,pair的第二个迭代器返回的是upper_bound返回的迭代器,如果这两个迭代器相等的话,则说明map中不出现这个关键字。

二、去重,排序计数

例:蓝桥杯真题   http://newoj.acmclub.cn/contests/1258/problem/9

1659: 2018蓝桥杯培训-STL应用专题-day 3 map作业题4

题目描述:

福尔摩斯从X星收到一份资料,全部是小写字母组成。
他的助手提供了另一份资料:许多长度为8的密码列表。
福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的。
请你编写一个程序,从第一份资料中搜索可能隐藏密码的位置。要考虑密码的所有排列可能性。

输入:

输入第一行:一个字符串s,全部由小写字母组成,长度小于1024*1024
紧接着一行是一个整数n,表示以下有n行密码,1<=n<=1000
紧接着是n行字符串,都是小写字母组成,长度都为8

输出:

一个整数, 表示每行密码的所有排列在s中匹配次数的总和。

样例输入

aaaabbbbaabbcccc
2
aaaabbbb
abcabccc

样例输出

4

讲真,第一反应就是KMP,然后就不知道该怎么做了,感觉例题很典型

#include <iostream>
#include <algorithm>
#include <map>
#include <cstdio>
using namespace std; int main()
{
// freopen("Atext.in","r",stdin);
string a,tmp="";
int n,ans=0;;
cin >> a;
map<string,int> pp;
for(int i=0;i<a.size()-7;i++)
{
tmp="";
for(int j=i;j<i+8;j++)
{
tmp+=a[j];
}
sort(tmp.begin(),tmp.end());
//cout << tmp <<endl;
pp[tmp]++;
}
cin >> n;
while(n--){
cin >> tmp;
sort(tmp.begin(),tmp.end());
ans+=pp[tmp];
}
cout << ans << endl;
return 0;
}

stl-----map去重,排序,计数的相关教程结束。

《stl-----map去重,排序,计数.doc》

下载本文的Word格式文档,以方便收藏与打印。