//参考effective STL 24
#include <iostream>
#include <map>
using namespace std;
template<typename MapType, typename KeyArgType, typename ValueArgType>
typename MapType::iterator addOrUpdate(MapType &m, const KeyArgType &k, const ValueArgType &v)
{
typename MapType::iterator lb = m.lower_bound(k);
if ( lb != m.end() && !(m.key_comp()(k, lb->first)) ) //key_comp() 默认 std::less<Key>
{
lb->second = v;
return lb;
}
else
{
typedef typename MapType::value_type MVT;
//hint insert 常数时间
return m.insert(lb, MVT(k, v));
}
}
int main()
{
map<int, string> m;
m.insert(make_pair(1, "1"));
m.insert(pair<int, string>(2, "2"));
m.insert(map<int, string>::value_type(3, "3") );
addOrUpdate(m, 4, "4");
addOrUpdate(m, 1, "11");
//1 "11"
//2 "2"
//3 "3"
//4 "4"
return 0;
}
map更新或插入数据
最新推荐文章于 2024-01-05 09:43:28 发布