唉,STL函數和容器並不總能達到您所期望的。這裏有兩個通用版本,第一個更喜歡你上面的代碼:
template<class Map>
inline typename Map::iterator ForceInsert1(
Map& m,
const typename Map::key_type& k,
const typename Map::data_type& d)
{
typename Map::iterator it = m.insert(
typename Map::value_type(k, d)).first;
it->second = d; // only necessary if the key already exists
return it;
}
template<class Map>
inline typename Map::iterator ForceInsert2(
Map& m,
const typename Map::key_type& k,
const typename Map::data_type& d)
{
typename Map::iterator it = m.find(k);
if(it != m.end())
{
it->second = d;
}
else
{
it = m.insert(typename Map::value_type(k, d)).first;
}
return it;
}
typedef std::map<int, int> MyMap;
void Foo(MyMap& myMap)
{
ForceInsert1(myMap, 42, 100);
ForceInsert2(myMap, 64, 128);
}
請注意,地圖的價值類型不'對' ,而是'pair '。 –
2012-04-13 20:19:07
插入或編輯,你想要哪一個?很明顯,你已經有了一個插入的單線程,那麼問題到底是什麼? – 2012-04-13 20:20:17
我相信你找到了最有效的方法。如果你只是不喜歡它的外觀,實現一個「替換」功能,結合這兩個步驟,但即使這樣做將按照你的例子來實現。 – Chad 2012-04-13 20:20:40