日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第十二篇:实用的关联容器

發布時間:2025/6/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十二篇:实用的关联容器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

? ? ? ?我們可以用下標訪問順序容器的元素,也就是說在順序容器實現中下標和元素的值相關聯。那么能不能讓別的值(而不是下標)與元素的值相關聯呢?有的,實現這種功能的容器就叫做關聯容器,而關聯的本質就是某個特定的“鍵”與元素的值相關聯。

常見的關聯容器

? ? ? ?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函數,我將在下篇隨筆中詳細講解。

總結

以上是生活随笔為你收集整理的第十二篇:实用的关联容器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。