使用 MAP CLASS 庫建立關聯容器
http://www.vckbase.com/document/viewdoc/?id=1377
關聯式資料庫,科學計算應用以及基於Web的系統常常需要類似 vector 的容器,其索引可以是如何資料型別,不一定是整數。這樣的容器叫關聯容器,或者 map。例如,目錄服務應用可以將私人姓名作為索引來儲存,電話號碼作為其關聯的值: directory["Harry"]=8225687;// 插入 "Harry" 並與他的電話號碼關聯 iterator it=directory.find("Harry");// 獲取 Harry 的電話號碼 其它關聯容器的應用還包括將 URLs 對映到 IP 的 DNS 伺服器,字典,庫存清單,工資表等等。那麼如何突破整型索引的侷限,實現用其它資料型別作為索引的關聯容器呢?答案是:使用 <map> 庫建立和處理關聯容器。 #include <utility> //definition of pair #include <string> pair <string, string> prof_and_course("Jones", "Syntax"); pair <int, string> symbolic_const (0, "false"); 標準庫還定義了一個輔助函式,方便 pair 型別的建立: string prof; string course; make_pair(prof,course);//returns pair <string,string> 第一步:構造和初始化一個 map 物件 #include <map> map <string, string> addresses; 為了新增元素,使用下標算符: addresses["Paul W."]="paul@mail.com"; 這裡,串“Paul W.”是索引或鍵值,“paul@mail.com”是其關聯的值。如果該 map 已經包含了此鍵值,那麼當前所關聯的值不會改變: addresses["Paul W."]= "newaddr@com.net"; // 不起作用 第二步:搜尋 iterator find(const key_type& k); const_iterator find(const key_type& k) const; 通常,用 typedef 可以使程式碼更可讀一些: typedef map <string, string>::const_iterator CIT; CIT cit=addresses.find("Paul W."); if (cit==addresses.end()) cout << "sorry, no such key" << endl; else cout << cit->first << ''/t'' << cit->second << endl; 表示式中 cit->first 和 cit->second 分別返回鍵值及其關聯的值。 Bob 35 Bob 90 Jane 80.25 Sue 100 Jane 65.5 你的應用程式必須彙總所有代理的獎金並將每個代理的獎金總數顯示出來.首先,建立一個 map,然後讀取該資料檔案: map <string, double> bonuses; string agent; double bonus=0; ifstream bonusfile("bonuses.dat"); if(!bonusfile) { // 報告出錯資訊並終止程式 } while (bonusfile >> agent >> bonus) { bonuses[agent]+=bonus;// 累加每個代理的獎金 } 不管理相不相信,就這麼簡單!且讓我們來分析一下該迴圈。開啟資料檔案之後,while 迴圈讀取每個值對,並將其存入 agent 和 bouns 物件。接著,它將 agent 和 bouns 插入到該 map。此處的關鍵技巧是:如果鍵值(agent)已經存在,那麼 += 操作符便將最新讀取的 bouns 累加到儲存在 map 中當前的 bouns 中。因為表示式: map[key] 返回與鍵值關聯的值。當過載的 += 操作符被呼叫時,該值便被累加到新讀取的 bouns 中。最後累加的和覆蓋 map 中舊的關聯值。記住:當你使用下標算符機制時,純粹的賦值操作並不會改寫現有的值,只有過載的 += 才這麼做。 map[key] 返回預設的初始化 T,而 T 在上述例子中是 double 型別。預設的初始值為 0。至此,map 包含代理及其獎金彙總值對。下面的迴圈用來顯示這些值對,輸出如圖一所示: for(CIT p=bonuses.begin(); p!=bonuses.end(); ++p) { cout << p->first <<''/t'' << p->second <<endl; }
|
|
作者簡介 Danny Kalev 是一名通過認證的系統分析師,專攻 C++ 和形式語言理論的軟體工程師。1997 年到 2000 年期間,他是 C++ 標準委員會成員。最近他以優異成績完成了他在普通語言學研究方面的碩士論文。 業餘時間他喜歡聽古典音樂,閱讀維多利亞時期的文學作品,研究 Hittite、Basque 和 Irish Gaelic 這樣的自然語言。其它興趣包括考古和地理。Danny 時常到一些 C++ 論壇並定期為不同的 C++ 網站和雜誌撰寫文章。他還在教育機構講授程式設計語言和應用語言課程。 |
/////////////////////////////////////////////////
// 執行 cpl.bat 編譯,生成 a.exe 檔案,執行它。
// Write by MMT Studio
// 2005.01.14
/////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <fstream>
#include <map>
using namespace std;
typedef map <string, double>::const_iterator CIT;
void main()
{
map <string, double> bonuses;
string agent;
double bonus=0;
ifstream bonusfile("bonuses.dat");
if(!bonusfile)
{
// 報告出錯資訊並終止程式
cout<<"open file error!"<<endl;
exit(-1);
}
while (bonusfile >> agent >> bonus)
{
bonuses[agent]+=bonus;// 累加每個代理的獎金
}
// 顯示 map 中的值,已經彙總
for(CIT p=bonuses.begin(); p!=bonuses.end(); ++p)
{
cout << p->first <<'/t' << p->second <<endl;
}
}
相關文章
- Class-map
- c++primer——關聯容器的使用C++
- springboot建立與資料庫關聯模組Spring Boot資料庫
- C++ Qt開發:使用關聯容器類C++QT
- map/ multimap容器
- SQL Server資料庫建立新使用者及關聯資料庫的方法教程SQLServer資料庫
- 【Effective STL(3)】關聯容器
- 2.3.1 有關使用DBCA建立資料庫資料庫
- docker建立容器後如何使用Docker
- 資料結構——關聯容器資料結構
- 資料庫也可以像電腦一樣組裝:使用Kafka建立關聯式資料庫 – Robert Yokota資料庫Kafka
- STL_map和multimap容器
- 2.3.2 關於使用互動式DBCA建立資料庫資料庫
- ORM 跨庫關聯ORM
- 詳解Java 容器(第④篇)——容器原始碼分析 - MapJava原始碼
- 使用docker建立和執行跨平臺的容器化的mssql資料庫DockerSQL資料庫
- Scala——三個容器:List Set Map
- 關於SQL Server 映象資料庫快照的建立及使用SQLServer資料庫
- Spring IOC 容器為什麼不使用 Class.forName 載入類Spring
- gitlab Docker容器建立命令以及從容器中備份gitlab倉庫示例GitlabDocker
- 伺服器:建立的docker容器怎麼關閉伺服器Docker
- 2.1 關於建立資料庫資料庫
- 類成員函式作為map容器的value使用例項函式
- 達夢資料庫建立檢視&MyBatis表能不能關聯檢視資料庫MyBatis
- 多表關聯查詢中,關聯欄位都應該建立索引嗎?索引
- 使用Rancher建立負載均衡的容器應用負載
- [Docker]在Ubuntu容器中建立sudo使用者DockerUbuntu
- Go map相關Go
- docker使用容器搭建本地私有倉庫Docker
- Map的某種建立方式
- 標識使用者 使用者關聯 IDM 全域使用者關聯
- 2.3.3 關於使用非互動式/靜默DBCA建立資料庫資料庫
- Go通關04:正確使用 array、slice 和 map!Go
- cocoaPods私有庫的建立與使用
- GitHub使用心得——倉庫建立Github
- 硬體開發基本流程(五):建立USB封裝庫並關聯原理圖元器件封裝
- 4.3.1 關於使用DBCA建立CDB
- 關於使用Topshelf建立服務
- 2.5.1 關於建立資料庫的子句資料庫