tob*_*spr 11 c++ standards language-lawyer c++11
C++标准std::map
使用以下命令定义构造函数std::initializer_list
:
map( std::initializer_list<value_type> init, const Allocator& );
Run Code Online (Sandbox Code Playgroud)
但是,在哪里定义了初始化程序列表包含重复键时会发生什么?是第一个选择键还是最后一个?例如:
std::map<std::string, int> my_map {
{"a", 1},
{"a", 2}
};
Run Code Online (Sandbox Code Playgroud)
在实践中,它似乎表现得像insert()
,因此地图现在将包含{a:1}.
但是,我无法在C++标准中找到任何关于此的内容.
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
,但对于这个表,这个单词被分成两行,在断点处有一个连字符.)