2011-04-24 92 views
0

Map是一個容器類,用於存儲聚合數據......它很容易檢索存儲在其中的數據,因爲它使用散列算法進行檢索。 map是一個鍵值對...可以用相應的鍵檢索數據... 在這個聲明下面我定義了鍵必須是整數(4字節)和數據作爲字符串值。 ..無法理解C++中map的用法

typedef map<INT32U,string> EventMapType; 

我搜索了使用維基百科的地圖的示例程序...但我無法理解在there..I給需要知道如何DATAS和密鑰存儲在地圖中的例子,如何通過密鑰來檢索它...我是MFC新手...

+7

http://www.cplusplus.com/reference/stl/map/map/ – 2011-04-24 08:20:52

+1

我不明白你的問題。您對地圖中數據的內在表現感興趣嗎?或者您對如何使用地圖感興趣?如果第二,你可以更具體地指向地點,你不能理解在維基百科或任何其他的例子。只需粘貼代碼並指向你不明白的地方。我想我們正在談論STL,而不是MFC。 – beduin 2011-04-24 08:24:03

+0

@Brian Roach:感謝您的鏈接 – Angus 2011-04-24 08:24:43

回答

3

貝婭塔,

我只是做了一個快速谷歌,並與http://erunways.com/c-using-the-standard-template-library-stl-map-example/我不會只是複製粘貼在這裏的代碼上來......這是隻有大約50行。

我建議你通讀該代碼,然後編譯並運行它(按原樣)。如果遇到問題或者只是對您沒有意義的東西,請在此提出具體問題。 K +

乾杯。基思。

+0

@keith:我試過這個例子,它工作。 – Angus 2011-04-24 09:55:29

3

map不使用散列。它不能,因爲約束不需要可哈希鍵。它通常實現爲二叉搜索樹,按鍵排序。因此,它需要密鑰< -comparable

相比之下,C++ 0x將提供一個unordered_map,它確實使用散列。

如果您想獲得具體的幫助,您應該告訴我們您到目前爲止嘗試過的代碼以及您不瞭解的示例。

2

STL的地圖類允許您通過任何類型的鍵存儲數據,而不是通過數字鍵來存儲數據,這是您必須訪問數組或矢量的方式。因此,不必計算散列函數然後訪問數組,您可以讓地圖類爲您做。

typedef map<INT32U,string> MyEventMapType; 
MyEventMapType EventMapType; 

以下用作參考代碼。

存儲值:

EventMapType[key1] = string1 ; 
EventMapType[key2] = string2 ; 
EventMapType[key3] = string3 ; 

要檢查在key1的價值...

if(EventMapType.find("key1") == EventMapType.end()) 
{ 
    std::cout<<"string1 is not in the map!"<<endl; 
} 

更多閱讀documentation

迭代也可以用作一般手段fo r訪問存儲在地圖中的數據;你可以使用獲取迭代器之前的基本技術:

+3

EventMapType是一種類型,你不能只是:EventMapType [key1] = string1。首先聲明變量... – snoofkin 2011-04-24 08:47:14

+0

@ soulSurfer2010:我宣佈它像typedef地圖 EventMapType; PLZ再次看到答案。 – Jhaliya 2011-04-24 08:51:05

+0

#include「stdafx.h」#include #include #include using namespace std; int main(){typedef map EventTypeMap; EventTypeMap EventType;的EventType [1] = 「貝阿塔」;的EventType [2] = 「Jane」 的;的EventType [3] = 「迪克蘭」; if(EventType.find(1)== EventType.end()){cout <<「字符串不在地圖中!」<< endl; } return 0; }輸出:沒有顯示。當使用.find(「1」)我得到一個錯誤,它不可能從常量字符轉換爲常量int.when嘗試使用.find('1')它顯示我「字符串是不在地圖中「。請告訴我在這段代碼中做了什麼錯誤。 – Angus 2011-04-24 09:35:53