2017-10-13 243 views
-3

这是一个填充地图的现有代码。以不同方式填充地图

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

StringToSetMap myMap; 

std::string str ("hello"); 

SomeSet &mySet = myMap[str]; //Map populates here 

“SomeSet”是一个typedefed unordered_set。

地图,因为我知道,可以在仅方式填充提到here

这是怎么填充地图这条路?

+3

什么的问题的答案你链接到这里发生了什么不清楚? – NathanOliver

回答

1

See the docs对于所述下标运算符。需要注意的是运营商的描述是,它...

返回映射到一个等价键,键的值, 参考,如果这样的键不存在

执行插入

还要注意:

返回值

参考到映射的值o f如果不存在具有密钥键 的元素,则为新元素。否则,对现有元素 的映射值的引用,其键值等于密钥。

“你好”是不是在你的地图上的一个关键,所以它被插入和一个闪亮的新SomeSet对象的引用返回给您。

(注:关键是上移,建造或拷贝构造,但无论哪种方式的值总是默认构造确保您有一个默认的构造函数SomeSet!)

+1

值得指出的是,插入的元素将是默认构造的,因此只有在您的映射为具有默认构造函数的类型时才能使用下标运算符。 –

+0

@ scohe001因此,我也可以先填充mySet,然后执行'myMap [str] = mySet'。那是对的吗? – ontherocks

+0

@ontherocks当然。 'myMap [str]'返回一个对新的'SomeSet'对象的引用,然后你将它设置为等于某个东西。它相当于'SomeSet&thing = myMap [str]; thing = mySet;' – scohe001