使用新的初始化列表语法在map中插入项目

时间:2013-06-29 04:22:03

标签: c++11 map insert initializer-list

我正在玩C ++ 11,我找到了一种在地图中插入值的非常有用的方法(无序和/或多图):

map<unsigned, string> test;
test.insert({1, "abc"});

虽然这段代码正常运行(使用GCC 4.8或Clang 3.2编译),但我遇到了一些问题。 insert()基本上有6个签名,我们感兴趣

1. pair<iterator,bool> insert (const value_type& val);
2. template <class P> pair<iterator,bool> insert (P&& val);
3. void insert (initializer_list<value_type> il);

前两个采用pair<const key_type,mapped_type>类型对象,当最后一个采用列表时。所以,从理论上讲,代码

test.insert({1, "abc"});

正在使用第二个insert()版本/签名,它使用C ++ 11统一初始化来构建对,因此将此对用作lvalue。这可以“解释”为

test.insert(pair<const unsigned, string> {1, "abc"});

请注意,我们也可以

test.insert(pair<const unsigned, string>(1, "abc"));

test.insert(make_pair(1, "abc"));

但第一个版本似乎更自然。这种方法有一些重大问题吗?可能与列表初始化程序版本冲突?

0 个答案:

没有答案