C ++标准使用std::map
:
std::initializer_list
构造函数
map( std::initializer_list<value_type> init, const Allocator& );
但是,在哪里定义了如果初始化列表包含重复键会发生什么?是第一个选择键还是最后一个?例如:
std::map<std::string, int> my_map {
{"a", 1},
{"a", 2}
};
在实践中,它似乎表现得像insert()
,因此地图现在将包含{a:1}。
但是,我无法在C ++标准中找到任何关于此的内容。
答案 0 :(得分:5)
N4296(~C ++ 14)
表102 - 关联容器要求
X(il);
|与X(il.begin(), il.end())
相同。
然后从表格的上方,对于迭代器ctor:
效果:构造一个空的 容器和插入元素 从
[i, j)
范围到它; 使用c
作为比较对象。
和
i
和j
满足输入迭代器要求,并引用可隐式转换为value_type
的元素,[i,j)
表示有效范围,
请注意,这里的“和插入元素”不标记为insert
函数,但我想我们可以这样解释它。另请注意,i
和j
是输入迭代器,因此必须按顺序遍历。
(找到这些信息稍微困难一些,因为等效表都有
类型的对象
il
指定initializer_list<value_type>
在他们之上,所以可以通过搜索initializer_list
来找到,但是对于这个表,这个词被分成两行,在断点处有一个连字符。)