侧边栏
首页代码

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会自动排序的特点

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

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

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

最后利用迭代器输出set即可

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

一个是if(auto it : s)

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

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

第二个用于输出

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

posted @ 2020-10-17 00:05  AlexStraightUp  阅读(91)  评论(1)    收藏  举报
页脚HTML代码