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中

相關文章
相關標籤/搜索