C++ 以不同的方式填充地图

C++ 以不同的方式填充地图,c++,c++11,unordered-map,C++,C++11,Unordered Map,这是填充映射的现有代码 typedef unordered_map<std::string, SomeSet> StringToSetMap; StringToSetMap myMap; std::string str ("hello"); SomeSet &mySet = myMap[str]; //Map populates here typedef无序映射StringToSetMap; StringToSetMap myMap; std::string str(

这是填充映射的现有代码

typedef unordered_map<std::string, SomeSet> StringToSetMap;

StringToSetMap myMap;

std::string str ("hello");

SomeSet &mySet = myMap[str]; //Map populates here
typedef无序映射StringToSetMap;
StringToSetMap myMap;
std::string str(“hello”);
SomeSet&mySet=myMap[str]//地图在此填充
“SomeSet”是一个排版无序的集合

据我所知,地图只能以上述方式填充

这是如何以这种方式填充映射的?

用于所讨论的下标运算符。请注意,操作员的描述是它

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

另请注意:

返回值

如果没有包含key的元素,则引用新元素的映射值 存在的。否则,将引用现有元素的映射值 其密钥与密钥等效

“hello”不是地图中的一个键,因此它会被插入,并向您返回一个新的
SomeSet
对象的引用


(注意:键可以是move-constructed也可以是copy-constructed,但无论哪种方式,值都始终是默认构造的。请确保为
SomeSet
!)具有默认构造函数)

关于您链接到的问题的答案如何使这里的情况变得不清楚?值得指出的是,插入的元素将默认构造,因此,下标运算符只能在映射到具有默认构造函数的类型时使用。@scohe001,因此我也可以先填充mySet,然后执行
myMap[str]=mySet
。是这样吗?@ontherocks当然
myMap[str]
返回对新的
SomeSet
对象的引用,然后将其设置为某物。它相当于
SomeSet&thing=myMap[str];事物=我的集