簡體   English   中英

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

[英]How to insert elements in a map efficiently?

如何有效地在std :: map中插入元素? 一個常見的要求是,如果映射已經具有元素鍵,則返回false;否則,返回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;
}

根據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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM