map实例代码:
1 // UVa156 Ananagrams 2 // Rujia Liu 3 // 题意:输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排得到输入文本中的另外一个单词 4 // 算法:把每个单词“标准化”,即全部转化为小写字母然后排序,然后放到map中进行统计 5 #include<iostream> 6 #include<string> 7 #include<cctype> 8 #include<vector> 9 #include<map> 10 #include<algorithm> 11 using namespace std; 12 13 map<string,int> cnt; 14 vector<string> words; 15 16 // 将单词s进行“标准化” 17 string repr(string s) { 18 string ans = s; 19 for(int i = 0; i < ans.length(); i++) 20 ans[i] = tolower(ans[i]); 21 sort(ans.begin(), ans.end()); 22 return ans; 23 } 24 25 int main() { 26 int n = 0; 27 string s; 28 while(cin >> s) { 29 if(s[0] == '#') break; 30 words.push_back(s); 31 string r = repr(s); 32 if(!cnt.count(r)) cnt[r] = 0; 33 cnt[r]++; 34 } 35 vector<string> ans; 36 for(int i = 0; i < words.size(); i++) 37 if(cnt[repr(words[i])] == 1) ans.push_back(words[i]); 38 sort(ans.begin(), ans.end()); 39 for(int i = 0; i < ans.size(); i++) 40 cout << ans[i] << "\n"; 41 return 0; 42 }