如果密钥不是映射中的初始化密钥,STL映射[key]会返回什么?

时间:2011-02-23 04:44:18

标签: c++ stl map

以下是一些示例代码:

 #include<iostream>
 #include<map>
 #include<string>
 using namespace std;

 int main()
 {
   map<char, string> myMap;
   myMap['a'] = "ahh!!";
   cout << myMap['a'] << endl << myMap['b'] << endl;
   return 0;
 }

在这种情况下,我想知道myMap ['b']返回了什么?

4 个答案:

答案 0 :(得分:28)

使用键std::stringstd::map插入到'b'的默认构建内容,并返回对此的引用。

咨询the documentation通常很有用,{{3}}将operator[]的行为定义为:

  

返回对与特定键关联的对象的引用。如果地图尚未包含此类对象,operator[]会插入默认对象data_type()

(SGI STL文档不是C ++标准库的文档,但它仍然是一个非常宝贵的资源,因为标准库容器的大多数行为与SGI STL容器的行为相同或非常接近。)

答案 1 :(得分:4)

返回默认构造的对象(例如,在这种情况下为空字符串)。

即使您说map['a'] = "ahh!!";,也会实际返回。 []运算符在位置'a'处插入一个默认构造的字符串,并返回对它的引用,然后调用=运算符。

答案 2 :(得分:2)

如果为查找提供的密钥不存在,则

std::map operator[]会将默认构造值类型插入到地图中。因此,您将获得一个空字符串作为查找的结果。

答案 3 :(得分:1)

如果您尝试使用索引运算符[]访问键值,则可能会发生以下两种情况:

  1. 地图包含此密钥。因此它将返回相应的键值
  2. 地图不包含密钥。在这种情况下,它会automatically add a key key value null'b'
  3. 由于""键不在您的地图中,因此它会自动添加值为1(空字符串)的此键,并且会打印此空字符串。

    此处地图尺寸将增加.find()

    因此,要查找密钥,您可以使用map.end(),如果找不到密钥,则会返回[]
    并且不会自动添加额外的密钥

    显然,您可以在为密钥设置值

    时使用{{1}}运算符