#c #maps #duplicates
#c #Карты #дубликаты
Вопрос:
Я ищу способ «привязать» карту с несколькими ключами к обычной карте. Моя мультимап выглядит так:
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
Значения, принадлежащие двум исходным ключам, объединяются. Теперь я мог бы написать какой-нибудь хороший цикл и выполнять итерации, копировать и удалять материалы и так далее, Но мне интересно, знает ли кто-нибудь умный, может быть, даже быстрый способ сделать это.
Ответ №1:
Сохраняйте простоту…
map<string, string> new_map;
for(auto it = mmap.begin(), end = mmap.end(); it != end; it)
{
new_map[it->first].append(it->second);
}
Зачем усложнять?
Ответ №2:
Если элементы в multimap хранятся в правильном порядке (т. Е. Вы знаете, что 1456
это всегда повторяется раньше 8g
, тогда вы можете выполнить простой цикл:
std::map< key_t, string > resu<
for ( multimap_t::const_iterator it = mm.begin(); it != mm.end(); it ) {
result[ it->first ].append( it->second );
}
Проблема в том, что я не думаю, что порядок элементов, использующих общий ключ, гарантирован.
Комментарии:
1. AFAIK, для одного и того же ключа он поддерживает порядок вставки, хотя это может быть определено реализацией.
2. @Nim: проблема в том, что стандарт этого не гарантирует.
3. правда, я не мог видеть никаких упоминаний об этом даже в новом стандарте, поэтому я сказал, что, скорее всего, это определено реализацией, это зависит от OP, чтобы определить, есть ли какой-либо другой естественный порядок для применения…