#include <bits/stdc++.h> using namespace std; int main() { string S, key; int t = 1; map<string, string> country{ // 先建一個6個國家的對照表 {"HELLO", "ENGLISH"}, {"HOLA", "SPANISH"}, {"HALLO", "GERMAN"}, {"BONJOUR", "FRENCH"}, {"CIAO", "ITALIAN"}, {"ZDRAVSTVUJTE", "RUSSIAN"} }; while(cin >> S && S != "#"){ cout << "Case " << t << ": "; // 利用 map 中的 find 查看是否有對應的 key (country.end() 是沒有對應 key) cout << ((country.find(S) != country.end()) ? country[S] : "UNKNOWN") << endl; t++; // 紀錄是 case 幾 } return 0; }
補充一下,如果map已經會了,也可以來練unordered_map喔
特性 | map | unordered_map |
---|---|---|
底層實作 | 平衡二元搜尋樹(通常是紅黑樹) | Hash Table(雜湊表) |
元素順序 | key 有序(從小到大) | key 無序(插入順序不保證) |
查找/插入/刪除時間複雜度 | O(log n) | 平均 O(1),最壞 O(n) |
記憶體使用 | 較低 | 較高 |
迭代順序 | 遞增順序 | 任意順序(不保證) |
支援 .count(key) / .find(key) | 有 | 有 |
#include<iostream> #include<unordered_map> using namespace std; int main() { ios::sync_with_stdio(0);cin.tie(0); unordered_map<string,string> umap{ {"HELLO" , "ENGLISH"}, {"HOLA" , "SPANISH"}, {"HALLO" , "GERMAN"}, {"BONJOUR" , "FRENCH"}, {"CIAO" , "ITALIAN"}, {"ZDRAVSTVUJTE" , "RUSSIAN"} }; string s; int t=1; while(cin >> s and s!="#"){ cout << "Case " << t << ": ";
//.count()可用來查找kay是否存在,若存在傳回1,反之傳回0 if(umap.count(s))cout << umap[s] << "\n"; else cout << "UNKNOWN\n"; t++; } }
btw 版主好像寫了一個string key;
但沒有用到耶
有錯歡迎指教