现在的位置: 首页 > 综合 > 正文

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

2014年03月12日 ⁄ 综合 ⁄ 共 1001字 ⁄ 字号 评论关闭
/*
 * 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中即可。。。。。

抱歉!评论已关闭.