我正在寻找一种方法将多键地图“压缩”到法线贴图。我的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
合并原始两个键的值。现在,我可以写一些不错的循环并迭代,复制和删除等等,但我想知道是否有人知道一个聪明的,甚至是快速的方法来完成这个。
答案 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 );
}
问题是我不认为共享共同密钥的元素的顺序是有保证的。