![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
trdm |
![]()
Сообщение
#1
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
Непонятки с QMap....
Казалось бы while(it != map.begin()){ гарантирует, что найдется пара с m_nomber == 1 Ан нет, нефига.... |
|
|
![]() |
rnd |
![]()
Сообщение
#2
|
Студент ![]() Группа: Участник Сообщений: 54 Регистрация: 22.7.2009 Пользователь №: 930 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Нужно помнить, что map (QMap) сортирует элементы по ключу, именно поэтому к ключу предъявляется требование less-then comparable(т.е. определена операция <).
Поэтому при обычном переборе он и будет отдавать элементы в порядке возрастания ключей. А как он устроен внутри - дело второе. Если порядок элементов не важен (или для ключа недоступна операция <) - можно пользоваться QHash to SABROG, все-таки итераторы гораздо более универсальны, чем индексы. Индексы - это по сути только последовательные контейнеры, которые предоставляют произвольный доступ (vector, deque, в Qt QList). А вот когда существует не один вариант обхода контейнера - итераторы рулят, например дерево: post_order_iterator - узел после детей pre_order_iterator - узел перед детьми breadth_first_iterator - все узлы по уровням и т.п. Кстати, rbegin(), rend() - простейшие примеры нестандартного обхода |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 17.6.2025, 0:58 |