std::map 初始化列表构造函数

std::map initializer list constructor

C++ 标准使用 std::initializer_list:

定义了一个 std::map 构造函数
map( std::initializer_list<value_type> init, const Allocator& );

但是,如果初始化列表包含重复键,会发生什么情况?是选择第一个键还是最后一个?例如:

std::map<std::string, int> my_map {
  {"a", 1}, 
  {"a", 2}
};

在实践中,它的行为似乎类似于 insert(),因此地图现在将包含 {a: 1}。

但是,我无法在 C++ 标准中找到与此相关的任何内容。

N4296 (~C++14)

Table 102 - Associative container requirements

X(il); | Same as X(il.begin(), il.end()).

然后从上面的table,对于迭代器构造函数:

Effects: Constructs an empty container and inserts elements from the range [i, j) into it; uses c as a comparison object.

i and j satisfy input iterator requirements and refer to elements implicitly convertible to value_type, [i,j) denotes a valid range,

请注意,这里的 "and inserts elements" 是 而不是 标记以指示 insert 功能,但我想我们可以这样解释。另请注意,ijinput迭代器,因此必须按顺序遍历。

.

(找到这个信息稍微难一点,因为等价的table都有

il designates an object of type initializer_list<value_type>

在它们之上,因此可以通过搜索 initializer_list 找到,但对于此 table,该词分为两行,中间有一个连字符。)