访问元素
一个 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"