Spec-Zone.ru › Qt

Класс QMutableMultiMapIterator

шаблон <typename Key, typename T> class QMutableMultiMapIterator

Класс QMutableMultiMapIterator предоставляет итератор в стиле Java для QMultiMap. Подробнее...

Заголовок: #include <QMutableMultiMapIterator>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
  • Список всех членов, включая унаследованные

Открытые функции

QMutableMultiMapIterator(QMultiMap<Key, T> &map)
QMutableMultiMapIterator<Key, T> & operator=(QMultiMap<Key, T> &container)
bool findNext(const T &value)
bool findPrevious(const T &value)
bool hasNext() const
bool hasPrevious() const
const Key & key() const
QMutableMultiMapIterator::Item next()
QMutableMultiMapIterator::Item peekNext() const
QMutableMultiMapIterator::Item peekPrevious() const
QMutableMultiMapIterator::Item previous()
void remove()
void setValue(const T &value)
void toBack()
void toFront()
const T & value() const
T & value()

Подробное описание

QMultiMap имеет как итераторы в стиле Java, так и итераторы в стиле STL. Итераторы в стиле STL более эффективны и предпочтительны.

QMutableMultiMapIterator<Key, T> позволяет перебирать QMultiMap и изменять карту. Если вам не нужно изменять карту (или у вас есть константная QMultiMap), используйте немного более быстрый QMultiMapIterator вместо него.

Конструктор QMutableMultiMapIterator принимает QMultiMap в качестве аргумента. После создания итератор находится в самом начале карты (перед первым элементом). Вот как перебрать все элементы последовательно:

QMultiMap<int, QWidget *> multimap;
...
QMutableMultiMapIterator<int, QWidget *> i(multimap);
while (i.hasNext()) {
    i.next();
    qDebug() << i.key() << ": " << i.value();
}

Функция next() возвращает следующий элемент в карте и перемещает итератор вперёд. Функции key() и value() возвращают ключ и значение последнего элемента, который был пропущен.

В отличие от итераторов в стиле STL, итераторы в стиле Java указывают между элементами, а не непосредственно на них. Первый вызов next() перемещает итератор в позицию между первым и вторым элементом и возвращает первый элемент; второй вызов next() перемещает итератор в позицию между вторым и третьим элементом и так далее.

Вот как перебрать элементы в обратном порядке:

QMutableMultiMapIterator<int, QWidget *> i(multimap);
i.toBack();
while (i.hasPrevious()) {
    i.previous();
    qDebug() << i.key() << ": " << i.value();
}

Если вы хотите найти все вхождения определенного значения, используйте findNext() или findPrevious() в цикле. Например:

QMutableMultiMapIterator<int, QWidget *> i(multimap);
while (i.findNext(widget)) {
    qDebug() << "Found widget " << widget << " under key "
             << i.key();
}

Если вы хотите удалять элементы при переборе карты, используйте remove(). Если вы хотите изменить значение элемента, используйте setValue().

Пример:

QMutableMultiMapIterator<QString, QString> i(multimap);
while (i.hasNext()) {
    i.next();
    if (i.key() == i.value())
        i.remove();
}

В примере удаляются все пары (ключ, значение), где ключ и значение совпадают.

Только один изменяемый итератор может быть активен для данной карты в любой момент времени. Кроме того, никакие изменения не должны вноситься непосредственно в карту во время активности итератора (в отличие от изменений через итератор), поскольку это может привести к аннулированию итератора и неопределенному поведению.

См. также QMultiMapIterator и QMultiMap::iterator.

Документация функций-членов

void QMutableMultiMapIterator::setValue(const T &value)

Заменяет значение последнего элемента, который был пропущен при использовании одной из функций обхода, на value.

Функциями обхода являются next(), previous(), findNext() и findPrevious().

См. также key(), value() и remove().

void QMutableMultiMapIterator::remove()

Удаляет последний элемент, который был пропущен при использовании одной из функций обхода (next(), previous(), findNext(), findPrevious()).

См. также setValue().

bool QMutableMultiMapIterator::findPrevious(const T &value)

Ищет value, начиная с текущей позиции итератора назад. Возвращает true если пара (ключ, значение) со значением value найдена; в противном случае возвращает false.

После вызова, если value был найден, итератор размещается непосредственно перед соответствующим элементом; в противном случае итератор размещается в начале контейнера.

См. также findNext().

bool QMutableMultiMapIterator::findNext(const T &value)

Ищет value, начиная с текущей позиции итератора вперёд. Возвращает true если пара (ключ, значение) со значением value найдена; в противном случае возвращает false.

После вызова, если value был найден, итератор размещается непосредственно после соответствующего элемента; в противном случае итератор размещается в конце контейнера.

См. также findPrevious().

const Key &QMutableMultiMapIterator::key() const

Возвращает ключ последнего элемента, который был пропущен при использовании одной из функций обхода (next(), previous(), findNext(), findPrevious()).

После вызова next() или findNext(), key() эквивалентно peekPrevious().key(). После вызова previous() или findPrevious(), key() эквивалентно peekNext().key().

См. также value().

T &QMutableMultiMapIterator::value()

Это перегруженная функция.

Возвращает неконстантную ссылку на значение последнего элемента, который был пропущен при использовании одной из функций обхода.

const T &QMutableMultiMapIterator::value() const

Возвращает значение последнего элемента, который был пропущен при использовании одной из функций обхода (next(), previous(), findNext(), findPrevious()).

После вызова next() или findNext(), value() эквивалентно peekPrevious().value(). После вызова previous() или findPrevious(), value() эквивалентно peekNext().value().

См. также key() и setValue().

QMutableMultiMapIterator::Item QMutableMultiMapIterator::peekPrevious() const

Возвращает предыдущий элемент, не перемещая итератор.

Вызовите key() на возвращаемом значении, чтобы получить ключ элемента, и value(), чтобы получить значение.

Вызов этой функции для итератора, расположенного в начале контейнера, приводит к неопределённым результатам.

См. также hasPrevious(), previous(), и peekNext().

QMutableMultiMapIterator::Item QMutableMultiMapIterator::previous()

Возвращает предыдущий элемент и перемещает итератор назад на одну позицию.

Вызовите key() на возвращаемом значении, чтобы получить ключ элемента, и value(), чтобы получить значение.

Вызов этой функции для итератора, расположенного в начале контейнера, приводит к неопределённым результатам.

См. также hasPrevious(), peekPrevious(), и next().

bool QMutableMultiMapIterator::hasPrevious() const

Возвращает true , если за итератором есть хотя бы один элемент, т.е. итератор не находится в начале контейнера; в противном случае возвращает false.

См. также hasNext() и previous().

QMutableMultiMapIterator::Item QMutableMultiMapIterator::peekNext() const

Возвращает ссылку на следующий элемент, не перемещая итератор.

Вызовите key() на возвращаемом значении, чтобы получить ключ элемента, и value() чтобы получить значение.

Вызов этой функции для итератора, расположенного в конце контейнера, приводит к неопределённым результатам.

См. также hasNext(), next(), и peekPrevious().

QMutableMultiMapIterator::Item QMutableMultiMapIterator::next()

Возвращает следующий элемент и продвигает итератор на одну позицию вперёд.

Вызовите key() на возвращаемом значении, чтобы получить ключ элемента, и value() чтобы получить значение.

Вызов этой функции для итератора, расположенного в конце контейнера, приводит к неопределённым результатам.

См. также hasNext(), peekNext(), и previous().

bool QMutableMultiMapIterator::hasNext() const

Возвращает true , если за итератором есть хотя бы один элемент, т.е. итератор не находится в конце контейнера; в противном случае возвращает false.

См. также hasPrevious() и next().

void QMutableMultiMapIterator::toBack()

Перемещает итератор в конец контейнера (после последнего элемента).

См. также toFront() и previous().

void QMutableMultiMapIterator::toFront()

Перемещает итератор в начало контейнера (перед первым элементом).

См. также toBack() и next().

QMutableMultiMapIterator<Key, T> &QMutableMultiMapIterator::operator=(QMultiMap<Key, T> &container)

Заставляет итератор работать с map. Итератор устанавливается в начало map (перед первым элементом).

См. также toFront() и toBack().

QMutableMultiMapIterator::QMutableMultiMapIterator(QMultiMap<Key, T> &map)

Создаёт итератор для обхода map. Итератор устанавливается в начало map (перед первым элементом).

См. также operator=().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qmutablemultimapiterator.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API