我有一个MAP可选择类型std :: map和可选的类型unordered_map(根据typdef MAP),以及一个函数,它将值添加到给定密钥的值:加速std :: map和boost:unordered_map []操作
func1(MAP<string, double> &map, string &key, double &val2add){
try
{
map.at(key) += val2add;
}catch(out_of_range& oor){
map[key] = val2add; // in case map[key] didn't exist before.
}
}
的问题是,这意味着不是简单
func2(MAP<string, double> &map, string &key, double &val2add){
map[key] += val2add; // if map[key] doesn't exist - problem
}
但上面是行不通的双(以及可能甚至更多)的工作,因为据我所知[]操作初始化与已定义的键映射的新对象,以及默认的double值。如果我知道默认的double值是0,那么func2仍然可以实现我想要的 - 但我不能依赖它。
那么有什么方法可以比func1更好地使用[]吗?
我不明白你的问题是什么。如果key不存在,''std :: map'和'std :: unordered_map'的'operator []'保证为该值创建一个具有值初始化值的项。每个基本类型的值 - 初始化为0. – 2012-02-20 12:34:12