#include<iostream>
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cctype>
#include<string.h>
#include<map>
using namespace std;
template<typename MapType, // map的类型
typename KeyArgType, // KeyArgType和ValueArgtype
typename ValueArgtype> // 是类型参数
// 的原因请看下面
typename MapType::iterator
efficientAddOrUpdate(MapType& m,
const KeyArgType& k,
const ValueArgtype& v)
{
typename MapType::iterator Ib = // 找到k在或应该在哪里;
m.lower_bound(k); // 为什么这里
// 需要“typename”
// 参见第7页
if(Ib != m.end() && // 如果Ib指向一个pair
!(m.key_comp()(k, Ib->first))) { // 它的键等价于k...
Ib->second = v; // 更新这个pair的值
return Ib; // 并返回指向pair的
} // 迭代器
else{
typedef typename MapType::value_type MVT;
return m.insert(Ib, MVT(k, v)); // 把pair(k, v)添加到m并
} // 返回指向新map元素的
} // 迭代器
int main()
{
map<int,int> m;
m[0]=0;
m[1]=1;
m[2]=2;
m[4]=4;
efficientAddOrUpdate(m,4,3);
efficientAddOrUpdate(m,3,3);
cout<<m[3]<<endl;
cout<<m[4]<<endl;
return 0;
}
STL map的高效插入和更新
最新推荐文章于 2024-07-16 11:06:21 发布