void main()
{
std::map<int,int>keyValueMap;
keyValueMap.insert(0,1);
keyValueMap.insert(0,2);
int index = keyValueMap.begin()->second;
}
此点的索引值是1而不是2可以解释为什么?
答案 0 :(得分:3)
答案 1 :(得分:0)
std::map::insert()
的所有2-param重载都需要迭代器,而不是键/值对。
大多数标准容器insert()
方法都将容器的value_type
作为输入。 value_type
的{{1}}是std::pair
。因此,在将键/值对插入std::map
时,您必须将其作为std::map
传递给insert()
,例如:
std::pair
现在,即便如此,第二个void main()
{
std::map<int,int> keyValueMap;
keyValueMap.insert(std::make_pair(0, 1));
keyValueMap.insert(std::make_pair(0, 2));
int index = keyValueMap.begin()->second;
}
仍然不会覆盖第一个insert()
的值,即使它们都具有相同的密钥insert()
。第二个插入将被忽略:
将元素插入容器中,如果容器尚未包含具有等效键的元素。
...
返回值
1-3)返回一对由
0
组成的插入元素(或阻止插入的元素)和iterator
表示是否插入发生了。
要使用第二个值覆盖第一个值,您可以:
使用bool
返回的迭代器:
insert()
使用地图的void main()
{
std::map<int,int> keyValueMap;
keyValueMap.insert(std::make_pair(0, 1));
auto ret = keyValueMap.insert(std::make_pair(0, 2));
if (!ret.second) ret.first->second = 2;
int index = keyValueMap.begin()->second;
}
代替:
operator[]