/*
* UVA_156.cpp
*
* Created on: 2013年11月1日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
multimap<string,string> r;//multimap与马培德不同之处就在于,它的key允许重复元素的出现
string t;
while(cin >> t,t != "#"){
string t_copy(t);
int len = t_copy.length();
int i;
for(i = 0 ; i < len ; ++i){
t_copy[i] = tolower(t_copy[i]);
}
// sort(t_copy,t_copy+len);//这种可以用于C风格的字符串的排序,但用于C++风格的字符串可能会出错
sort(t_copy.begin(),t_copy.end());//C++风格的字符串\STL中的允许随机存取的数据结构可以使用这一种方式进行排序
r.insert(make_pair(t_copy,t));//map可以通过pair对象来维护key/value.
}
vector<string> ans;
for(map<string,string>::iterator it = r.begin(); it != r.end() ; ++it){
if(r.count((*it).first) == 1){//r.count(str): 返回str在map中出现的次数
ans.push_back((*it).second);
}
}
// sort(ans,ans + size);
sort(ans.begin(),ans.end());
int size = ans.size();
int i;
for(i = 0 ; i < size ; ++i){
// printf("%s\n",ans[i]);
cout<<ans[i]<<endl;//无论是map还是vector有支持这种下标的访问方式
}
return 0;
}
这道题的思路就是: 每读取一个字符串的同时,就把一个该字符串小写&&排序以后的字符串与该字符串存进一个multimap中。。然后再遍历multimap,把里面key只出现一次的元素找出来存在一个vector中即可。。。。。