Преобразовать карту multi_key в «нормальную» карту, объединяющую несколько ключей - PullRequest
0 голосов
/ 01 ноября 2011

Я ищу способ "застегнуть" карту с несколькими ключами на карту нормалей.Моя мультикарта выглядит так:

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 ]

2 голосов
/ 01 ноября 2011

Не усложняйте ...

map<string, string> new_map;

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

Зачем усложнять?

0 голосов
/ 01 ноября 2011

Если элементы в мультикарте хранятся в правильном порядке (то есть вы знаете, что 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 );
}

Проблема в том, что я не думаю, что порядок элементов, совместно использующих общий ключ, гарантирован.

...