#include <iostream>
#include <map>
#include <vector>
using namespace std;
/*
STL容器类都有一个内置数据类型 value_type
value_type本质上就是模板类型
例如:
vector<int> v1;
vector<int>::value_type x; //定义x变量,x的数据类型就是int
在map关联容器类型中,执行更新操作时,map::operator[]效率更高
执行新元素插入操作时,map-insert效率更高
*/
template<typename MapType, typename KeyArgType, typename ValueArgtype>
typename MapType::iterator efficientUpdate(MapType& m, const KeyArgType& k, const ValueArgtype& v)
{
typename MapType::iterator it = m.lower_bound(k);
if ((it != m.end()) && !(m.key_comp()(k, it->first)))
{
//update
it->second = v;
return it;
}
else
{
//add
typedef typename MapType::value_type MVT;
return m.insert(it, MVT(k, v));
}
}
void test()
{
map<int, int> m1;
for (int i = 0; i < 10; i++)
{
efficientUpdate<map<int, int>, int, int>(m1, i, i * 2);
}
map<int, int>::iterator it;
for (it = m1.begin(); it != m1.end(); ++it)
{
cout << it->first << ":" << it->second << endl;
}
}
int main()
{
test();
getchar();
return 0;
}