學習筆記 c++ (map 對映)
阿新 • • 發佈:2018-12-14
對映(map)
- 對映與集合同屬於單重關聯容器,它們的主要區別在於,集合的元素型別是鍵本身,而對映的元素型別是由鍵和附加資料所構成的二元組。
- 在集合中按照鍵查詢一個元素時,一般只是用來確定這個元素是否存在,而在對映中按照鍵查詢一個元素時,除了能確定它的存在性外,還可以得到相應的附加資料。
例10-10
有五門課程,每門都有相應學分,從中選擇三門,輸出學分總和
//10_10.cpp #include <iostream> #include <map> #include <string> #include <utility> using namespace std; int main() { map<string, int> courses; //將課程資訊插入courses對映中 courses.insert(make_pair("CSAPP", 3)); courses.insert(make_pair("C++", 2)); courses.insert(make_pair("CSARCH", 4)); courses.insert(make_pair("COMPILER", 4)); courses.insert(make_pair("OS", 5)); int n = 3; //剩下的可選次數 int sum = 0; //學分總和 while (n > 0) { string name; cin >> name; //輸入課程名稱 map<string, int>::iterator iter = courses.find(name);//查詢課程 if (iter == courses.end()) { //判斷是否找到 cout << name << " is not available" << endl; } else { sum += iter->second; //累加學分 courses.erase(iter); //將剛選過的課程從對映中刪除 n--; } } cout << "Total credit: " << sum << endl; //輸出總學分 return 0; } 執行結果如下: C++ COMPILER C++ C++ is not available CSAPP Total credit: 9
例10-11
統計一句話中每個字母出現的次數
// 10_11.cpp #include <iostream> #include <map> #include <cctype> using namespace std; int main() { map<char, int> s; //用來儲存字母出現次數的對映 char c; //儲存輸入字元 do { cin >> c; //輸入下一個字元 if (isalpha(c)){ //判斷是否是字母 c = tolower(c); //將字母轉換為小寫 s[c]++; //將該字母的出現頻率加1 } } while (c != '.'); //碰到“.”則結束輸入 //輸出每個字母出現次數 for (map<char, int>::iterator iter = s.begin(); iter != s.end(); ++iter) cout << iter->first << " " << iter->second << " "; cout << endl; return 0; }