如何在地图中有效地插入元素



如何在 std::map 中有效地插入元素?一个常见的要求是,如果映射已经有元素键,则返回 false;否则插入它并返回 true。我找不到一个好的现成方法来做到这一点。

template<class Key, class Value>
bool insert(Key const& key, Value const& value, std::map<Key, Value>& myMap);

如何使用std::map::emplace

template<class Key, class Value>
bool insert(Key const& key, Value const& value, std::map<Key, Value>& myMap)
{
    return myMap.emplace(key,value).second;
}

如果它在您的环境中不可用,您可以使用

template<class Key, class Value>
bool insert(Key const& key, Value const& value, std::map<Key, Value>& myMap)
{
    typedef typename std::map<Key, Value>::value_type value_type;
    return myMap.insert(value_type(key,value)).second;
}

继丹尼尔斯的回答之后,我可以建议使用 insert(( 而不是 emplace(( 并在需要时在您的类上提供一个单独的 emplace(( 方法吗?

原因是 emplace(( 使显式构造函数隐式。这意味着,如果 Value 不可复制,则需要使用 map.insert 或确保 Value 提供移动赋值运算符。insert(( 还保持了与 C++11 之前的编译器的向后兼容性(如果这可能是一个问题(。

template<class Key, class Value>
bool insert(Key const& key, Value const& value, std::map<Key, Value>& myMap)
{
    return myMap.insert(std::make_pair(key,value)).second;
}
template<class Key, class Value>
bool emplace(Key const& key, Value const& value, std::map<Key, Value>& myMap)
{
    return myMap.emplace(key,value).second;
}

最新更新