Глава 12. Структура проекта. Основные типы
Обратите внимание: после того, как мы добавили ещё одно значение с тем
же ключом (Marry), предыдущее значение было перезаписано новым значением.
Для того, чтобы добавить несколько значений с одним и тем же ключом можно
воспользоваться методом insertMulti().
#include . . .
QHash l C l a s s i f i c a t i o n H a s h ;
//Добавляем несколько значений с одинаковыми ключами
l C l a s s i f i c a t i o n H a s h . i n s e r t M u l t i ( " f r u i t s " , " a p p l e " ) ;
l C l a s s i f i c a t i o n H a s h . i n s e r t M u l t i ( " f r u i t s " , " o r a n g e " ) ;
l C l a s s i f i c a t i o n H a s h . i n s e r t M u l t i ( " v e g e t a b l e s " , " p o t a t o " ) ;
l C l a s s i f i c a t i o n H a s h . i n s e r t M u l t i ( " v e g e t a b l e s " , " c a b b a g e " ) ;
l C l a s s i f i c a t i o n H a s h . i n s e r t M u l t i ( " v e g e t a b l e s " , " t o m a t o " ) ;
qDebug ( )<qDebug ( )<qDebug ( )<Получим следующий вывод в консоль:
"orange"
("orange", "apple")
("tomato", "cabbage", "potato")
Для итерации по списку можно воспользоваться макросом foreach. Также
можно воспользоваться итератором в стиле Java. Например:
QList l L i s t ; //Создаём список целых чисел
l L i s t . append ( 3 ) ;
//Добавляем элементы
l L i s t . append ( 6 ) ;
l L i s t . append ( 9 ) ;
Q L i s t I t e r a t o r l I t ( l L i s t ) ; //Создаём итератор для списка
while ( l I t . hasNext ( ) ) //Пока следующий элемент существует
{
qDebug ( ) << l I t . n e x t ( ) ; //...вывести следующий элемент
}
Другой пример — итерация в обратном направлении. На этот раз используем
хеш.
QHash lNumberByName ;
lNumberByName . i n s e r t ( " t w e l v e " , 1 2 ) ;
lNumberByName . i n s e r t ( " t h i r t y t h r e e " , 3 3 ) ;
lNumberByName . i n s e r t ( " o n e h u n d r e d an t w e n t y f i v e " , 1 2 5 ) ;
Q H a s h I t e r a t o r l H a s h I t e r a t o r ( lNumberByName ) ;
l H a s h I t e r a t o r . toBack ( ) ; //Перейти к концу контейнера — итератор указывает после
//последнего элемента
while ( l H a s h I t e r a t o r . h a s P r e v i o u s ( ) )
{
l H a s h I t e r a t o r . p r e v i o u s ( ) ; //Переходим к предыдущемму элементу
//Выводим ключ и значение
qDebug ( ) << l H a s h I t e r a t o r . key ( )<< " - " << l H a s h I t e r a t o r . v a l u e ( ) ;
}
Следующий пример — с итератором в стиле STL.
QHash : : c o n s t _ i t e r a t o r l S t l L i k e I t e r a t o r ;
f o r ( l S t l L i k e I t e r a t o r = lNumberByName . b e g i n ( ) ;
l S t l L i k e I t e r a t o r != lNumberByName . end ( ) ;
l S t l L i k e I t e r a t o r ++)
{
qDebug ( ) << l S t l L i k e I t e r a t o r . key ( )<< " - "
//Тоже самое, что и ∗ l S t l L i k e I t e r a t o r
<< l S t l L i k e I t e r a t o r . v a l u e ( ) ;
}
Программирование на языке С++ в среде Qt Creator