Получить первый ключ std::multimap, c

#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. Большое вам спасибо, ответ и ваши комментарии были очень полезны!