Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。
功能:建立key-value的映射 key与value是任何你需要的类型 exp:map<char,int> a 建立一个char到int的映射a。
常用语句:begin()返回map头部迭代器
end()返回尾部迭代器
clear()清空所有元素
erase()删除一个元素
find()查找一个元素
empty()如果为空则返回true
size()返回map大小
count(elem)返回某个元素个数
例题:UVa 156 -反片语
大意是给你几串字符串 求出自身字符随意组合后不会出现在这些字符串里面的字符串 按字典序排序。
Sample input
ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Rides dealer NotE derail LaCeS drIed noel dire Disk mace Rob dries #
Sample output
Disk NotE derail drIed eye ladder soon 分析 这道题的解法很多,最简化的方式就是使用map容器。想到使用“标准化”。整体思路:1.写一个标准化函数(实现大写字母转换为小写(tolower()函数),单词排序。注意使用const是为了不改变s的初值)2.两个vector容器(words,ans),一个map容器(cnt)words存储所有的单词map存储标准化后对应单词以及出现次数的值,相当于一个表格。words经过查表map,把对应的符合值给ans
感觉初次写map还是挺爽的...
#include<iostream>
#include<map>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
map<string,int>mmap;
vector<string> str;
string standard(const string &s)
{
string t=s;
for(int i=0;i<s.size();i++)
{
t[i]=tolower(s[i]);//转换成小写字母
}
sort(t.begin(),t.end());
return t;
}
int main()
{
string s;
while(cin>>s)
{
if(s[0]==‘#‘)
break;
str.push_back(s);//推入vector
string r=standard(s);//将其标准化
mmap[r]++;
}
vector<string>ans;
for(vector<string>::iterator it=str.begin();it!=str.end();it++)
{
if(mmap[standard(*it)]==1)
ans.push_back(*it);
}
sort(ans.begin(),ans.end());
for(vector<string>::iterator it=ans.begin();it!=ans.end();it++)
{
cout<<*it<<endl;
}
return 0;
}
原文地址:https://www.cnblogs.com/koris-yyf/p/9029970.html