2010-11-08 78 views
2

我使用無序地圖像unordered_map C++

unorderedmap.insert(make_pair(5, 6)); 

我怎麼能得到關鍵的位置迭代器(價值5)?我是否需要再次使用find(),或者我可以如何從返回值中獲取它?

謝謝。

回答

3

假設你正在使用this unordered_map,迭代器:

unorderedmap.insert(make_pair(5, 6)).first; 
+1

'.second'告訴你它是否成功。 – 2010-11-08 10:43:15

0

這是從http://www.cplusplus.com/reference/stl/map/insert/

採取所以如前所述,使用對::第一個獲得迭代器。

第一個版本返回一個對,與 其成員對::第一設定爲 迭代地指向新 插入元件或給元件 已經在 地圖有其相同的值。 對中的pair :: second元素在插入新元素 時設置爲true;如果存在具有相同值的元素 ,則將該元素設置爲false。

+0

-1:unordered_map!=地圖 – Puppy 2010-11-08 12:36:47

+0

啊,我以爲他的意思是地圖。我學到了一些新的感謝。現在來看看它們之間的差異:) – Wgaffa 2010-11-08 15:48:27

2

首先unordered_map不是標準容器。但是如果您使用的編譯器提供的unordered_map提供的API類似於this,那麼它會返回一對<iterator,bool>。可以使用.first訪問的對的iterator部分將爲您提供插入元素的位置(如果插入成功,則可以使用bool second進行測試)。

+4

它在C++ 0x中是標準的,這還不是官方的,但大多數新的編譯器已經開始實現它。 – Gorpik 2010-11-08 10:45:57

+0

它也在TR1和Boost中使用,非常好用。 – Puppy 2010-11-08 12:35:54

+0

@Gorpik,@DeadMG:由於問題被標記爲STL,因此提問者「應該」使用'hash_map'。仍然具有相同的「插入」功能。 – 2010-11-09 01:59:13

0

unordered_map界面類似於set界面或該map接口insert方法返回一個std::pair<iterator,bool>

  • 如果插入成功,它沒有,如果一個元素髮生的bool是真實的在容器中已經存在類似的鑰匙
  • iterator指向正確的元件:或者已有的或者新插入的鑰匙取決於具體情況

因此,如果你只希望訪問元素,你可以簡單地使用:

map.insert(std::make_pair(key,value)).first 

但是做檢查,你不需要知道,如果插入成功與否,在一般人關心它:)