4、STL之map(映射表)

例题:

Ananagrams

大意:

给出很多单词,找出重排以后不会重复的单词,比较时不区分大小写;输出是要保留大小写,并按照字典序进行排列(所有大写在前面)。

知识点:

map是从键(key)到值(value)的映射,和数组差不多只不过能够用[“key”]来访问对应的值。

C++ map用法总结(整理)转自 sevencheng798

利用一个vector来储存原来的所有单词
标准化之后,更新map的值
然后遍历第一个vector,将满足条件的放入第二个vector
最后排序,然后输出

代码:

#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
vector<string> words;
vector<string> ans;
map<string,int> cnt;
string repr(const string& x){
 string str = x;
 for(int i = 0;i<str.length();i++){
  str[i] = tolower(str[i]);
 }
 sort(str.begin(),str.end());
 return str;
}
int main(){
 string s1;
 while(cin >> s1){
  if(s1[0] == '#') break;
  words.push_back(s1);
  string s2 = repr(s1);
  if(!cnt.count(s2)) cnt[s2] = 0; // 如果不存在,就创建
  cnt[s2] ++;  // 对应的值不管原先存不存在,都要+1
 }
 for(int i = 0;i<words.size();i++){
  if(cnt[repr(words[i])]==1){  // 恰好等于一,证明只出现了一次,那么对应的
   ans.push_back(words[i]);
  }
 }
 sort(ans.begin(),ans.end());
 for(int i = 0;i<ans.size();i++){
  cout << ans[i] << endl;
 }
}

----1/31 今天累了,明天八点起来把最后的栈和队列看了,然后看dp。

发布了45 篇原创文章 · 获赞 0 · 访问量 1008

猜你喜欢

转载自blog.csdn.net/jokerxsy/article/details/104127865