标签:清空 sam cme 意义 c++ 第一个 input map cal
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 -反片语
大意是给你几串字符串 求出自身字符随意组合后不会出现在这些字符串里面的字符串 按字典序排序。
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 #
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;
}
标签:清空 sam cme 意义 c++ 第一个 input map cal
原文地址:https://www.cnblogs.com/koris-yyf/p/9029970.html