将multi_key映射转换为连接多个键的“普通”映射

时间:2011-11-01 08:36:10

标签: c++ maps duplicates

我正在寻找一种方法将多键地图“压缩”到法线贴图。我的multimap看起来像这样:

Key                 v a l u e s 
<string>            <string>

140,1,08,2500       1456 
140,1,10,3040       1456 
.............       ....
.............       ....
140,1,08,2500       8g   
140,1,13,3040       8g   
.............       ....

第一个和倒数第二个键是相同的。我的目标是合并这两个(和所有其他重复键对)行,以便结果是:

140,1,08,2500       14568g

合并原始两个键的值。现在,我可以写一些不错的循环并迭代,复制和删除等等,但我想知道是否有人知道一个聪明的,甚至是快速的方法来完成这个。

2 个答案:

答案 0 :(得分:2)

保持简单......

map<string, string> new_map;

for(auto it = mmap.begin(), end = mmap.end(); it != end; ++it)
{
  new_map[it->first].append(it->second);
}

为什么要把它变得更复杂?

答案 1 :(得分:0)

如果多图中的元素以正确的顺序存储(即你知道1456总是在8g之前迭代,那么你可以做一个简单的循环:

std::map< key_t, string > result;
for ( multimap_t::const_iterator it = mm.begin(); it != mm.end(); ++it ) {
   result[ it->first ].append( it->second );
}

问题是我不认为共享共同密钥的元素的顺序是有保证的。