昨天看了一道題

這道題要我們把單詞排好序輸出,每個單詞后面跟上單詞出現的順序。
由於這段時間在學Go語言,所以我就用Go語言來做了,結果超時了,我當時的思路是這樣的:
用一個map,存單詞和出現次數,用slice存出現過的單詞,輸入完成后對slice進行排序,然后在將map里的內容輸出,為此我還寫了一個比較字符串的函數(有點蠢),這個方法,當然超時了。
之后我不服氣,想着用c++再做一下試試,興許c++性能強,就不會超(eee,這個想法也挺蠢的)結果還是超時,於是我就搜一下這個題,發現有人說c++里的map中的key是有序存放的,所以單詞放進去就是按字典序排的,最后直接迭代就可以!!!!
所以我最后寫出了這樣的代碼
#include<iostream>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<map>
#include<stdio.h>
using namespace std;
int com(string a,string b){
int minlen = a.length()<b.length()? a.length():b.length();
int i;
for(i=0;i<minlen;i++){
if(a[i]!=b[i]){
return (int)(b[i]-a[i]);
}
}
return b.length()-a.length();
}
int main(){
int i,j;
int t;
cin>>t;
while(t--){
int n;
cin>>n;
map<string,int>mymap;
while(n--){
string str;
cin>>str;
mymap[str]++;
}
int nums=mymap.size();
printf("%d\n",nums);
map<string,int>::iterator iter;
for(iter = mymap.begin();iter!=mymap.end();iter++){
cout<<iter->first<<": "<<iter->second<<endl;
}
cout<<endl;
}
}
由此我又去探究了一下,發現,原來c++里的map相當於Java里的TreeMap,他們都是有序的而而c++中的hash_map和unordered_map是無序的。
Go語言中的map更怪了,遍歷map的時候,它會使用隨機數,所以你拿到的序列是隨機的,要想用Go語言實現這道題的要求,可以轉成切片,然后進行排序,不過呵呵,我用Go寫沒有AC。
