访问元素

一个 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::mapstd::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"