gpt4 book ai didi

C++:value_type 与 make_pair,哪个更快用于 map 插入?

转载 作者:IT老高 更新时间:2023-10-28 23:27:56 34 4
gpt4 key购买 nike

typedef map<KeyType, ValType> KVMap;
KVMap kvmap;

kvmap.insert( KVMap::value_type( key, val ) );
kvmap.insert( make_pair( key, val ) );

以上哪个选项插入到 STL 映射总是更快?为什么?

注意:我很清楚 insert() 比使用 []= 向 map 添加(而不是更新)键值对更快。请假设我的查询是关于添加,而不是更新。因此我将其限制为 insert().

最佳答案

第一个可能是'epsilon-faster',因为这个(从标准中的 23.3.1 开始):

typedef pair<const Key, T> value_type;

[...]

pair<iterator, bool> insert(const value_type& x);
  • 在第一个版本中,您直接构造 std::map<K,V>::insert 所期望的适当类型

  • 在第二个版本中,使用 std::pair 进行转换涉及模板构造函数。确实,std::make_pair很可能会将其模板参数推断为 KeyTypeValType ,因此返回 std::pair<KeyType, ValType> .

    这与 std::map<K,V>::insert 的参数类型不匹配,即 std::pair<const KeyType, ValType> (区别是 const -首先限定)。 std::pair转换构造函数将用于创建 std::pair<const K, V>来自 std::pair<K, V> .

公平地说,我认为您甚至无法衡量差异(我什至不确定流行的编译器实际上会为这些生成不同的代码)。

关于C++:value_type 与 make_pair,哪个更快用于 map 插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4623610/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com