更准确地说,我想知道在以下代码段中进行了多少std::pair
个模板构造函数调用:一个(对于std::pair<const KeyType, ValueType>
)或两个(对于std::pair<KeyType, ValueType>
来说是第一个make_pair
然后是std::pair<const KeyType, ValueType>
insert
之后的第二个?
std::map<KeyType, ValueType> m;
void addToMap(const KeyType& key)
{
ValueType val = someCalculation(key);
m.insert(std::make_pair(key, val));
}
答案 0 :(得分:3)
制作了两份副本,因为std::make_pair(key,val)
返回std::pair<KeyType, ValueType>
而不是std::pair<const KeyType, ValueType>
,因此需要复制。
你可以强制std::make_pair
提供正确的类型:
m.insert(std::make_pair<const KeyType, ValueType>(key, val));
但是你可以直接构建一个std::pair
:
m.insert(std::pair<const KeyType, ValueType>{key, val});
m.insert(decltype(m)::value_type(key,val));
但是,最好的选择是使用std::pair
避免首先创建临时emplace
:
m.emplace(key, val);