c++ - 如果我读取不存在键的 map 值会发生什么?

标签 c++ map

map<string, string> dada;
dada["dummy"] = "papy";
cout << dada["pootoo"];

我很困惑,因为我不知道它是否被认为是未定义的行为,如何知道我何时请求一个不存在的 key ,我是否只使用 find 代替?

最佳答案

map::operator[] 在数据结构中搜索与给定键对应的值,并返回对它的引用。

如果找不到它,它会透明地为其创建一个默认构造元素。 (如果您不想要这种行为,您可以改用 map::at 函数。)

您可以在此处获取 std::map 方法的完整列表:

http://en.cppreference.com/w/cpp/container/map

这是当前 C++ 标准中 map::operator[] 的文档...

23.4.4.3 map 元素访问

T& operator[](const key_type& x);

  1. 效果:如果map中没有与x等效的key,则将value_type(x, T())插入map中。

  2. 要求:key_type 应为 CopyConstructible,mapped_type 应为 DefaultConstructible。

  3. 返回:对 *this 中 x 对应的 mapped_type 的引用。

  4. 复杂度:对数。

T& 运算符[](key_type&& x);

  1. 效果:如果map中没有与x等效的key,则将value_type(std::move(x), T())插入map中。

  2. 要求:mapped_type 应为 DefaultConstructible。

  3. 返回:对 *this 中 x 对应的 mapped_type 的引用。

  4. 复杂度:对数。

关于c++ - 如果我读取不存在键的 map 值会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10124679/

相关文章:

c++ - boost::spirit 1.53 multi_pass iterator相关的编译错误

javascript - Javascript 中的重映射或映射函数

iOS:在一个 ViewController 中进行 map 和列表

map - 根据clojure中最长的seq映射向量的惯用方法是什么?

c++ - 在 C++ 中将变量名转换为字符串

c++ - 在 C++ 中从 Internet 读取文件

c++ - 成员引用基类型 'Node<int> *' 不是结构或 union

c++ - 在 Effects SDK 之后无法获取素材路径

hadoop - map 错误 - Attempy_xxxx_ 600 秒后超时

c++ - 向上转换指向数据成员的指针及其多态行为