Класс 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().
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()
Перемещает итератор в начало контейнера (перед первым элементом).
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