跳到主要内容

std::map operator[]

// (1) Non const version only
T& operator[]( const Key& key );
// (2) Non const version only
T& operator[]( Key&& key );

返回对指定索引pos处元素的引用

返回映射到等效键的值的引用,如果该键尚不存在,则执行插入。

(1) 如果键不存在,则就地构造一个 value_type 对象,该对象由 std::piecewise_construct, std::forward_as_tuple(key), std::tuple<>() 构造。

自 C++17 起,此函数等效于 return this->try_emplace(key).first->second

当使用默认分配器时,这会导致键从 key 复制构造,并且映射值被值初始化。

类型要求

  • value_type 必须满足从 std::piecewise_constructstd::forward_as_tuple(key)std::tuple<>() EmplaceConstructible 的要求。当使用默认分配器时,这意味着 key_type 必须满足 CopyConstructible 的要求,并且 mapped_type 必须满足 DefaultConstructible 的要求。

(2) 如果键不存在,则就地构造一个 value_type 对象,该对象由 std::piecewise_constructstd::forward_as_tuple(std::move(key))std::tuple<>() 构造。

自 C++17 起,此函数等效于 return this->try_emplace(key).first->second

当使用默认分配器时,这会导致键从 key 移动构造,并且映射值被值初始化。

类型要求

  • value_type 必须满足从 std::piecewise_constructstd::forward_as_tuple(std::move(key))std::tuple<>() EmplaceConstructible 的要求。当使用默认分配器时,这意味着 key_type 必须满足 MoveConstructible 的要求,并且 mapped_type 必须满足 DefaultConstructible 的要求。

参数

  • key - 要查找的元素的键

返回值

引用

如果不存在键为 key 的元素,则返回新元素的映射值的引用。否则返回引用到现有元素的映射值的引用,其键与 key 等效。

异常

如果任何操作抛出异常,则插入无效。

复杂度

对容器大小呈对数。

示例

Main.cpp
#include <iostream>
#include <map>

auto main() -> int {
std::map<std::string, int> playersScores = {
{ "player1", 50 },
{ "super_coder", 100 },
{ "andrew111", 41 }
};

std::cout << "player1 zdobył " << playersScores["player1"] << " punktów.\n";

std::cout << "super_cader zdobył " << playersScores["super_cader"] << " punktów.\n";
}
输出
player1 zdobył 50 punktów.
super_cader zdobył 0 punktów.
本文源自 此 CppReference 页面。它可能为了改进或编辑者偏好而进行了更改。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。

std::map operator[]

// (1) Non const version only
T& operator[]( const Key& key );
// (2) Non const version only
T& operator[]( Key&& key );

返回对指定索引pos处元素的引用

返回映射到等效键的值的引用,如果该键尚不存在,则执行插入。

(1) 如果键不存在,则就地构造一个 value_type 对象,该对象由 std::piecewise_construct, std::forward_as_tuple(key), std::tuple<>() 构造。

自 C++17 起,此函数等效于 return this->try_emplace(key).first->second

当使用默认分配器时,这会导致键从 key 复制构造,并且映射值被值初始化。

类型要求

  • value_type 必须满足从 std::piecewise_constructstd::forward_as_tuple(key)std::tuple<>() EmplaceConstructible 的要求。当使用默认分配器时,这意味着 key_type 必须满足 CopyConstructible 的要求,并且 mapped_type 必须满足 DefaultConstructible 的要求。

(2) 如果键不存在,则就地构造一个 value_type 对象,该对象由 std::piecewise_constructstd::forward_as_tuple(std::move(key))std::tuple<>() 构造。

自 C++17 起,此函数等效于 return this->try_emplace(key).first->second

当使用默认分配器时,这会导致键从 key 移动构造,并且映射值被值初始化。

类型要求

  • value_type 必须满足从 std::piecewise_constructstd::forward_as_tuple(std::move(key))std::tuple<>() EmplaceConstructible 的要求。当使用默认分配器时,这意味着 key_type 必须满足 MoveConstructible 的要求,并且 mapped_type 必须满足 DefaultConstructible 的要求。

参数

  • key - 要查找的元素的键

返回值

引用

如果不存在键为 key 的元素,则返回新元素的映射值的引用。否则返回引用到现有元素的映射值的引用,其键与 key 等效。

异常

如果任何操作抛出异常,则插入无效。

复杂度

对容器大小呈对数。

示例

Main.cpp
#include <iostream>
#include <map>

auto main() -> int {
std::map<std::string, int> playersScores = {
{ "player1", 50 },
{ "super_coder", 100 },
{ "andrew111", 41 }
};

std::cout << "player1 zdobył " << playersScores["player1"] << " punktów.\n";

std::cout << "super_cader zdobył " << playersScores["super_cader"] << " punktów.\n";
}
输出
player1 zdobył 50 punktów.
super_cader zdobył 0 punktów.
本文源自 此 CppReference 页面。它可能为了改进或编辑者偏好而进行了更改。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。