MyTetra Share
Делитесь знаниями!
Как перебрать все элементы QMap или QHash через foreach, получив ключ и значение
Время создания: 20.03.2016 22:41
Автор: Xintrea
Текстовые метки: Qt, foreach, QMap, QHash, перебор элементов, обход
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Принципы написания кода
Запись: xintrea/mytetra_syncro/master/base/1438258703ib4ow81z9c/text.html на raw.github.com

В стандартной документации Qt написано, что перебрать элементы объекта класса QMap или QHash можно через инструкцию foreach.


К сожалению, приводимый пример показывает, как перебрать значения QMap. А каким образом получить еще и ключи - не объясняется. Есть только ссылка на использование итераторов.


Перебор значений в официальной документации Qt выглядит так:



QMap<QString, int> map;

...

foreach (int value, map)

cout << value << endl;



Видно, что тут перебираются значения (value), а ключи (key) тут отсутсвуют.


Тем не менее, есть возможность перебрать и key, и value без итераторов. Делается это при помощи методов map.keys() и map.value() вот так:



QMap<QString, int> map;

 ...

foreach (QString key, map.keys())

{

int value=map.value(key);

  qDebug() << key << ":" << value;

}



Считается, что такой метод работает медленнее итераторов. Но он один из самых удобных.


Примечание. Иногда возникает вопрос: как удалять элементы при обходе списка QList или массива QVector? Об идеологически верном методе удаления написано в статье Как правильно удалять элементы из QVector или из QList в момент обхода массива (списка).



Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования