#c #multimap
Вопрос:
Я хочу получить только первый ключ мультикарты. Я уже достиг этого, пройдя через multimap, взяв первый ключ, а затем сделав перерыв. Но должен быть лучший способ, но я его не нахожу.
int store_key; std::multimaplt;int, intgt; example_map; // then something in it.. for (auto key : example_map) { store_key = key; break; }
Это решает проблему, но я ищу другое решение.
Комментарии:
1.
example_map.begin()-gt;first
?!?2. Кстати, вам нужно подумать о том, как вы будете обращаться с делом, когда
example_map
оно будет пустым.3. ваш
store_key
— это не просто ключ, но иstd::pairlt;const Key, mapped_typegt;
4. кстати, это плохая сторона хороших абстракций, таких как диапазон, основанный на цикле, очевидные вещи скрываются. Я предлагаю вам написать свой цикл с помощью простого старого цикла на основе итератора, и вы заметите, как вы можете избавиться от цикла
Ответ №1:
Ваш диапазон, основанный на цикле for, более или менее (не совсем, но достаточно хорош для этого ответа) эквивалентен:
for (auto it = example_map.begin(); it != example_map.end(); it) { auto key = *it; store_key = key; break; }
Я надеюсь, теперь ясно, что вы можете избавиться от цикла, и для непустой карты это просто:
auto store_key = *example_map.begin();
Обратите внимание, что store_key
это неправильное название, потому что это не просто ключ, и ваш код вызовет ошибку компилятора. Это std::pairlt;const int,intgt;
. store_key-gt;first
это ключ.
Комментарии:
1. Большое вам спасибо, ответ и ваши комментарии были очень полезны!