以下是一些示例代码:
#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']返回了什么?
答案 0 :(得分:28)
使用键std::string
将std::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)
如果您尝试使用索引运算符[]
访问键值,则可能会发生以下两种情况:
automatically add a key
key value null
到'b'
。由于""
键不在您的地图中,因此它会自动添加值为1
(空字符串)的此键,并且会打印此空字符串。
此处地图尺寸将增加.find()
因此,要查找密钥,您可以使用map.end()
,如果找不到密钥,则会返回[]
。
并且不会自动添加额外的密钥
显然,您可以在为密钥设置值
时使用{{1}}运算符