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

时间:2016-12-16 12:13:47

标签: c++ c++11 language-lawyer standards

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 ++标准中找到任何关于此的内容。

1 个答案:

答案 0 :(得分:5)

N4296(~C ++ 14)

  

表102 - 关联容器要求

     

X(il); |与X(il.begin(), il.end())相同。

然后从表格的上方,对于迭代器ctor:

  

效果:构造一个空的   容器和插入元素   从[i, j)范围到它;   使用c作为比较对象。

  

ij满足输入迭代器要求,并引用可隐式转换为value_type的元素,[i,j)表示有效范围,

请注意,这里的“和插入元素”标记为insert函数,但我想我们可以这样解释它。另请注意,ij输入迭代器,因此必须按顺序遍历。

(找到这些信息稍微困难一些,因为等效表都有

  

il指定initializer_list<value_type>

类型的对象

在他们之上,所以可以通过搜索initializer_list来找到,但是对于这个表,这个词被分成两行,在断点处有一个连字符。)