訪問元素
一個 std::map
需要 (key, value)
對作為輸入。
請考慮以下 std::map
初始化示例 :
std::map < std::string, int > ranking { std::make_pair("stackoverflow", 2),
std::make_pair("docs-beta", 1) };
在 std::map
中 ,可以按如下方式插入元素:
ranking["stackoverflow"]=2;
ranking["docs-beta"]=1;
在上面的示例中,如果金鑰 stackoverflow
已經存在,則其值將更新為 2.如果尚未存在,則將建立新條目。
在 std::map
中 ,可以通過將鍵作為索引直接訪問元素:
std::cout << ranking[ "stackoverflow" ] << std::endl;
請注意,在地圖上使用 operator[]
實際上會將帶有查詢鍵的新值插入到地圖中。這意味著即使金鑰已儲存在地圖中,也無法在 const std::map
上使用它。要防止此插入,請檢查元素是否存在(例如,使用 find()
)或使用 at()
,如下所述。
Version >= C++ 11
std::map
可以訪問 std::map
的元素:
std::cout << ranking.at("stackoverflow") << std::endl;
請注意,如果容器不包含請求的元素,at()
將丟擲 std::out_of_range
異常。
在 std::map
和 std::multimap
這兩個容器中,可以使用迭代器訪問元素:
Version >= C++ 11
// Example using begin()
std::multimap < int, std::string > mmp { std::make_pair(2, "stackoverflow"),
std::make_pair(1, "docs-beta"),
std::make_pair(2, "stackexchange") };
auto it = mmp.begin();
std::cout << it->first << " : " << it->second << std::endl; // Output: "1 : docs-beta"
it++;
std::cout << it->first << " : " << it->second << std::endl; // Output: "2 : stackoverflow"
it++;
std::cout << it->first << " : " << it->second << std::endl; // Output: "2 : stackexchange"
// Example using rbegin()
std::map < int, std::string > mp { std::make_pair(2, "stackoverflow"),
std::make_pair(1, "docs-beta"),
std::make_pair(2, "stackexchange") };
auto it2 = mp.rbegin();
std::cout << it2->first << " : " << it2->second << std::endl; // Output: "2 : stackoverflow"
it2++;
std::cout << it2->first << " : " << it2->second << std::endl; // Output: "1 : docs-beta"