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

时间:2013-10-12 20:34:05

标签: c++ map

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

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

2 个答案:

答案 0 :(得分:4)

如何使用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;
}

答案 1 :(得分:1)

根据Daniels的回答,如果您需要,我可以建议使用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;
}