2010-11-12 73 views
3

有沒有一種方法(除了將鍵作爲值的一部分存儲和遍歷映射)從STL映射,multimap(hash_map)和Perl鍵(%hash)中檢索鍵?檢索STL映射鍵

+0

您是否試圖獲取所有密鑰或與單個值關聯的密鑰? – 2010-11-12 21:00:04

回答

14
for (std::map<key, value>::iterator iter = m.begin(); iter != m.end(); ++iter) 
    iter->first; // this is the key 
+0

+1如果你想要的話,就拿出漂亮的包裝紙,但這就是它歸結的原因。 – 2010-11-12 20:17:55

+0

+1我們總是忘記簡單的解決方案。 – Klaim 2010-11-12 20:51:37

0

如果您經常需要獲得這些密鑰(就像在一個大循環),那麼你可能有興趣使用boost::bimap。否則,您可以使用正確的Nikola解決方案。

有時我會在將元素添加到地圖時將密鑰副本放在另一個容器中。它需要確保同步兩個容器,但是如果它足夠隔離(在一個類中),那麼它很容易設置。

+0

我認爲'boost :: bimap'在這裏是一個矯枉過正的東西。這裏沒有雙向關係。 – wilhelmtell 2010-11-12 20:59:22

+0

是的,正如我所說,這取決於爲什麼需要檢索密鑰。 – Klaim 2010-11-12 22:14:22

0

您可以使用for循環。

for (const auto & keyVal : myMap) 
    keyVal.first;