首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

(STL的使用7.3.1)UVA 156 - Ananagrams(multi地图、vector的使用)

2013-11-02 
(STL的使用7.3.1)UVA 156 - Ananagrams(multimap、vector的使用)/* * UVA_156.cpp * *Created on: 2013年11

(STL的使用7.3.1)UVA 156 - Ananagrams(multimap、vector的使用)

/* * 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中即可。。。。。

热点排行