如何高效地在std :: map中插入元素?一個常見的要求是,如果地圖已經有元素鍵,則返回false;否則插入它並返回true。我找不到一個好的方法來做到這一點。如何高效地在地圖中插入元素?
template<class Key, class Value>
bool insert(Key const& key, Value const& value, std::map<Key, Value>& myMap);
如何高效地在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;
}
@POW你需要一個map-value-type構造;即'std :: pair
從丹尼爾斯回答繼,可我建議使用插入( )而不是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;
}
如果該值不可複製,那麼'emplace'如何工作?請注意,'map'的'emplace'非常奇怪,因爲它是構造的'value_type'! –
您可以使用返回std :: pair的插入變體,該變量告訴您它是否是插入,或者您是否有權訪問C++ 11插入提示。請參見[本參考](http://www.cplusplus.com/reference/map/map/insert/)並單擊「C++ 11」選項卡。 –
kfsone