我有一个
multimap<key1,pair<key2, value2>>
我想在此multimap中更改value2。
typedef std::pair<int, int> comp_buf_pair; //pair<comp_t, dij>
typedef std::pair<int, comp_buf_pair> node_buf_pair;
typedef std::multimap<int, comp_buf_pair> buf_map; //key=PE, value = pair<comp_t, dij>
typedef buf_map::iterator It_buf;
buf_map bufsz_map;
bufsz_map.insert(node_buf_pair(target(*ei,g), comp_buf_pair(comp_t[target(*ei,g)], dij)));
for(It_buf it = bufsz_map.equal_range(*u_iter).first; it!= bufsz_map.equal_range(*u_iter).second;)
{
comp_buf_pair it1 = it->second;
if(it1.first < c_i)
{
std::cout << it1.first << " : " << it1.second << std::endl;
old_c_i = it1.first;
old_dij = it1.second;
updated_dij = (c_i-old_c_i) + old_dij;
// I would like to erase the it1.second value and add the updated_dij value in the bufsz_map
}
}
什么是更好的方法呢?
答案 0 :(得分:4)
语句it->second.second = updated_dij;
将覆盖旧值。由于您不更改密钥字段或指示新密钥的内容,因此这似乎已足够。
这是您要查找的内容,还是要在新密钥下插入updated_dij
并删除旧密钥?