修改boost unordered_map中key的值

时间:2014-11-03 13:02:25

标签: c++ boost unordered-map

我有一个boost :: unordered_map,我想修改特定键的值。 我看到了问题here

是什么让我的问题与众不同的是,我的map键是一个简单的int,我的值是std :: vector。我想通过在向量的第二个位置插入一个新的PoitCoord来更新这个值。

一个解决方案是这样的:

auto it = map.find(key);
if(it != map.end()) 
{
    std::vector<PointCoord> pntcrds = it->second;
    pntcrds.insert((pntcrds.begin()+1), new_value);
    it->second = pntcrds;
}

我想知道是否有更简洁的解决方案。

3 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,地图与您的插入没有任何关系。您只是在地图中修改恰好存储的矢量。您没有修改地图的,而是其中一个

所以简短的解决方案是:

auto it = map.find(key);
if(it != map.end() && !it->second.empty() ) 
{
    it->second.insert( (pntcrds.begin()+1), new_value);
}

如果您知道地图中存在该密钥,则可以将其缩短为:

std::vector<PointCords> & pntCords = map[key];
if( ! pntCords.empty() )
   pntCords.insert( pntCords.begin()+1, new_value );

注意:如果您使用第二种方法且密钥尚不存在,则会将默认构造(=空)std::vector<PointCords>插入到地图中。

答案 1 :(得分:1)

您必须找到密钥迭代位置,然后通过

直接更新找到的密钥
it->second.insert( (pntcrds.begin()+1), new_value);

但你必须确定你已经找到了迭代,并且@Johannes说你的向量不是空的。

答案 2 :(得分:1)

确实有一个非常简单的解决方案,涵盖了您可能会考虑的所有方案。它是

myMap[key].insert(pntcrds.begin()+1);

如果密钥不存在,则会插入密钥。否则,该值将更新为新值;

但是必须确保您的向量中至少有一个元素。否则,它会崩溃。

类似的伎俩是

myMap[key].push_back(new_value); // appends to the end of the vector