2011-11-01 54 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