[英]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.