这有用吗?
map<string, vector<int>> mymap;
mymap["bob"].push_back(1);
mymap["joe"].push_back(3);
mymap["joe"].push_back(12);
或者我必须这样做吗?
map<string, vector<int>> mymap;
if (mymap.find("bob") == mymap.end()) {
vector<int> vec;
mymap["bob"] = vec;
mymap["bob"].push_back(1);
}
else {
mymap["bob"].push_back(1);
}
...
基本上问题是mymap [“bob”]是否将矢量创建为其映射值,或者我是否必须自己创建矢量并将其添加到地图中以获取新键。
答案 0 :(得分:3)
map<string, vector<int>> mymap;
mymap["bob"].push_back(1);
应该有效。 map::operator[]
会为给定密钥插入一个项目(如果尚未存在)。
来自http://en.cppreference.com/w/cpp/container/map/operator_at
返回对映射到等效于key的键的值的引用,如果此类键尚不存在则执行插入。
答案 1 :(得分:1)
简短的回答:你的代码很好。
的std ::地图::操作符[]
mapped_type& operator[] (const key_type& k);
如果
k
匹配容器中元素的键,则为函数 返回对其映射值的引用。如果
k
与容器中任何元素的键不匹配,则该函数会使用该键插入一个新元素并返回一个引用 到它的映射值。请注意,这总是会增加容器 即使没有为元素分配映射值,也将大小加1 element是使用其默认构造函数构造的。类似的成员函数
map::at
具有相同的行为 具有键的元素存在,但是当它不存在时抛出异常。
考虑你的第二行,例如:
mymap["bob"].push_back(1);
mymap
没有密钥"bob"
,因此它会创建一个并返回对默认构造的(即空)vector<int>
关联的引用用那把钥匙。
然后push_back(1)
到该向量。您可以再次访问mymap["bob"]
,然后您将获得对该向量的引用,其中包含单个元素1
。