2011-11-01 56 views
0

我正在寻找将多键地图“zip”到普通地图的方法。我的multimap如下所示:将multi_key地图转换为加入多个键的“普通”地图

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

保持简单...

map<string, string> new_map; 

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

为什么让它更复杂?

0

如果multimap中的元素存储在正确的顺序(即你知道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); 
} 

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

+0

AFAIK,对于同一个密钥,它维护插入顺序,虽然这可能是实现定义的 – Nim

+0

@Nim:问题在于标准不能保证 –

+0

是真的,即使在第二天我也看不到任何提及新标准,这就是为什么我说,这是最有可能的实现定义,这是由OP确定是否有任何其他*自然*排序应用... – Nim