第十二篇:实用的关联容器
生活随笔
收集整理的這篇文章主要介紹了
第十二篇:实用的关联容器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
? ? ? ?我們可以用下標訪問順序容器的元素,也就是說在順序容器實現中下標和元素的值相關聯。那么能不能讓別的值(而不是下標)與元素的值相關聯呢?有的,實現這種功能的容器就叫做關聯容器,而關聯的本質就是某個特定的“鍵”與元素的值相關聯。
常見的關聯容器
? ? ? ?1. map:也即關聯數組,是鍵 - 值的集合
? ? ? ?2. set:純鍵的集合
? ? ? ?3. multimap:map容器的“ 一鍵對多值 “版本
? ? ? ?4. multiset:set容器的” 一鍵對多值 “版本
關聯容器的特性
? ? ? ?1. 下標訪問不存在將導致容器中增加一個新的元素。
? ? ? ?2. 可以使用count和find函數對鍵進行檢索操作(這個特性說明可以把鍵看成索引)。
map容器使用范例
? ? ? ?下面這個程序是一個微型的電話簿。該程序從當前目錄載入電話簿存檔文件,允許用戶通過姓名在電話簿中查找其對應的電話號碼并告知用戶。示例電話簿文件如下:
? ? ? ?
? ? ? ?源代碼:
1 #include <iostream> 2 #include <fstream> 3 #include <string> 4 #include <map> 5 6 using namespace std; 7 8 int main() 9 { 10 cout << "請輸入電話簿存檔文件名: "; 11 string filename; 12 cin >> filename; 13 14 /* 15 * 打開文件 16 */ 17 fstream io; 18 io.open(filename.c_str()); 19 if (!io) { 20 cout << "打開存檔文件失敗!" << endl; 21 return 1; 22 } 23 24 /* 25 * 將電話簿存至map容器 26 */ 27 map<string, string> telbook; 28 string name; 29 string tel; 30 while (io >> name) { 31 io >> tel; 32 // 注意這里下標使用的編程意義 33 telbook[name] = tel; 34 } 35 // 記得關閉流 36 io.close(); 37 cout << "電話簿文件載入完畢" << endl; 38 39 /* 40 * 獲取查詢對象并返回查詢結果 41 */ 42 map<string, string>::iterator it; 43 while (1) { 44 cout << "請輸入查詢對象( 輸入#退出 ): " << endl; 45 cin >> name; 46 if (name == "#") break; 47 // 檢索操作 48 it = telbook.find(name); 49 if (it!=telbook.end()) 50 cout << "查找結果: " << it->second << endl << endl; 51 else 52 cout << "找不到任何記錄" << endl << endl; 53 } 54 55 return 0; 56 }? ? ? ?運行結果:
? ? ? ?
說明
? ? ? ?1. set容器的基本操作和map基本相同,只是其元素為純鍵。
? ? ? ?2. multimap和multiset需要注意的地方是那個find函數,我將在下篇隨筆中詳細講解。
總結
以上是生活随笔為你收集整理的第十二篇:实用的关联容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php Pthread 多线程 (一)
- 下一篇: Matplotlib 中文用户指南 7.