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
功能,但我想我们可以这样解释。另请注意,i
和j
是input迭代器,因此必须按顺序遍历。
.
(找到这个信息稍微难一点,因为等价的table都有
il
designates an object of type initializer_list<value_type>
在它们之上,因此可以通过搜索 initializer_list
找到,但对于此 table,该词分为两行,中间有一个连字符。)
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 asX(il.begin(), il.end())
.
然后从上面的table,对于迭代器构造函数:
Effects: Constructs an empty container and inserts elements from the range
[i, j)
into it; usesc
as a comparison object.
和
i
andj
satisfy input iterator requirements and refer to elements implicitly convertible tovalue_type
,[i,j)
denotes a valid range,
请注意,这里的 "and inserts elements" 是 而不是 标记以指示 insert
功能,但我想我们可以这样解释。另请注意,i
和j
是input迭代器,因此必须按顺序遍历。
.
(找到这个信息稍微难一点,因为等价的table都有
il
designates an object of typeinitializer_list<value_type>
在它们之上,因此可以通过搜索 initializer_list
找到,但对于此 table,该词分为两行,中间有一个连字符。)