map 与 set 的综合运用 例题5-4 反片语(Ananagrams,Uva 156)

#include<bits/stdc++.h>3
using namespace std;
map<string ,int> v1;
map<string ,string> v2;
set<string> ans;
int main()
{
    string str ,st;
    while(cin >> str)
    {
        if(str == "#") break;
        st = str;
        for(int i = 0;i < st.length();i++)
        {
            st[i] = tolower(st[i]);
        }
        sort(st.begin() ,st.end());
        v1[st]++;
        v2[st] = str;
    }
    for(auto it : v1)
    {
        if(it.second == 1)
            ans.insert(v2[it.first]);
    }
    for(auto &it : ans)
    {
        cout << it << endl;
    }
    return 0;
}

最重要的是想到设置两个map 和标准化的单词 也就是将单词全变为小写并排序 以及set会自动排序的特色c++

一个是[标准化后的字符串[标准化后字符串的出现次数]spa

另外一个是[标准化后的字符串][原单词]code

第一个用于判断 若是该标准化后的字符串只出现了一次 那么这个单词就符合条件 这时候用第二个map insert到一个set中blog

最后利用迭代器输出set便可排序

其中迭代器有两种使用方法ci

一个是if(auto it : s)字符串

另外一个是 if(auto &it :s)string

第一个是可读 用于读取处理 不输出it

第二个用于输出class

虽然it : s 但不局限于x 也能够指向另外一个map 的相同位置 从而当次数符合条件判断后 insert 第二个map的原单词到set中

相关文章
相关标签/搜索