我已经确定了将元素插入到 a 中的四种不同方法std::map
:
std::map<int, int> function;
function[0] = 42;
function.insert(std::map<int, int>::value_type(0, 42));
function.insert(std::pair<int, int>(0, 42));
function.insert(std::make_pair(0, 42));
其中哪一个是首选/惯用方式? (还有其他我没有想到的方法吗?)
从 C++11 开始,您有两个主要的附加选项。首先,您可以使用insert()
使用列表初始化语法:
function.insert({0, 42});
这在功能上相当于
function.insert(std::map<int, int>::value_type(0, 42));
但更加简洁和可读。正如其他答案所指出的,这比其他形式有几个优点:
- The
operator[]
方法要求映射类型是可分配的,但情况并非总是如此。
- The
operator[]
方法可以覆盖现有元素,并且使您无法判断是否发生了这种情况。
- 其他形式的
insert
您列出的内容涉及隐式类型转换,这可能会减慢您的代码速度。
主要缺点是这种形式过去要求键和值是可复制的,因此它不适用于例如一张地图unique_ptr
价值观。该问题已在标准中修复,但修复可能尚未达到您的标准库实现。
其次,您可以使用emplace()
method:
function.emplace(0, 42);
这比任何形式都更简洁insert()
,适用于仅移动类型,例如unique_ptr
,理论上可能会稍微更有效(尽管一个像样的编译器应该优化掉差异)。唯一的主要缺点是它可能会让你的读者有点惊讶,因为emplace
方法通常不这样使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)