Spec-Zone.ru › Qt

Класс QMultiMap

шаблон <typename Key, typename T> класс QMultiMap

Класс QMultiMap — это шаблонный класс, предоставляющий ассоциативный массив с множеством эквивалентных ключей. Подробнее...

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

Примечание: Все функции в этом классе являются реентерабельными.

Открытые типы

класс const_iterator
класс iterator
класс key_iterator
ConstIterator
Iterator
const_key_value_iterator
difference_type
key_type
key_value_iterator
mapped_type
size_type

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

QMultiMap(const QMultiMap<Key, T> &other)
QMultiMap(QMultiMap<Key, T> &&other)
QMultiMap(std::multimap<Key, T> &&other)
QMultiMap(const std::multimap<Key, T> &other)
QMultiMap(QMap<Key, T> &&other)
QMultiMap(const QMap<Key, T> &other)
QMultiMap(std::initializer_list<std::pair<Key, T> > list)
QMultiMap()
QMultiMap<Key, T> & operator=(QMultiMap<Key, T> &&other)
QMultiMap<Key, T> & operator=(const QMultiMap<Key, T> &other)
~QMultiMap()
QMultiMap::iterator begin()
QMultiMap::const_iterator begin() const
QMultiMap::const_iterator cbegin() const
QMultiMap::const_iterator cend() const
void clear()
QMultiMap::const_iterator constBegin() const
QMultiMap::const_iterator constEnd() const
QMultiMap::const_iterator constFind(const Key &key) const
QMultiMap::const_iterator constFind(const Key &key, const T &value) const
QMultiMap::const_key_value_iterator constKeyValueBegin() const
QMultiMap::const_key_value_iterator constKeyValueEnd() const
bool contains(const Key &key) const
bool contains(const Key &key, const T &value) const
QMultiMap::size_type count(const Key &key) const
QMultiMap::size_type count(const Key &key, const T &value) const
QMultiMap::size_type count() const
bool empty() const
QMultiMap::iterator end()
QMultiMap::const_iterator end() const
QPair<QMultiMap::iterator, QMultiMap::iterator> equal_range(const Key &key)
QPair<QMultiMap::const_iterator, QMultiMap::const_iterator> equal_range(const Key &key) const
QMultiMap::iterator erase(QMultiMap::const_iterator pos)
QMultiMap::iterator erase(QMultiMap::const_iterator first, QMultiMap::const_iterator last)
QMultiMap::iterator find(const Key &key)
QMultiMap::const_iterator find(const Key &key) const
QMultiMap::const_iterator find(const Key &key, const T &value) const
T & first()
const T & first() const
const Key & firstKey() const
QMultiMap::iterator insert(const Key &key, const T &value)
QMultiMap::iterator insert(QMultiMap::const_iterator pos, const Key &key, const T &value)
bool isEmpty() const
Key key(const T &value, const Key &defaultKey = Key()) const
QMultiMap::key_iterator keyBegin() const
QMultiMap::key_iterator keyEnd() const
QMultiMap::key_value_iterator keyValueBegin()
QMultiMap::const_key_value_iterator keyValueBegin() const
QMultiMap::key_value_iterator keyValueEnd()
QMultiMap::const_key_value_iterator keyValueEnd() const
QList<Key> keys() const
QList<Key> keys(const T &value) const
T & last()
const T & last() const
const Key & lastKey() const
QMultiMap::iterator lowerBound(const Key &key)
QMultiMap::const_iterator lowerBound(const Key &key) const
QMultiMap::size_type remove(const Key &key)
QMultiMap::size_type remove(const Key &key, const T &value)
QMultiMap::size_type удалитьЕсли(Predicate pred)
QMultiMap::iterator заменить(const Key &key, const T &value)
QMultiMap::size_type размер() const
void поменять(QMultiMap<Key, T> &other)
T взять(const Key &key)
std::multimap<Key, T> вStdMultiMap() const &
QList<Key> уникальныеКлючи() const
QMultiMap<Key, T> & объединить(const QMultiMap<Key, T> &other)
QMultiMap<Key, T> & объединить(QMultiMap<Key, T> &&other)
QMultiMap::iterator верхняяГраница(const Key &key)
QMultiMap::const_iterator верхняяГраница(const Key &key) const
T значение(const Key &key, const T &defaultValue = T()) const
QList<T> значения() const
QList<T> значения(const Key &key) const

Связанные нечлены

qsizetype удалить_если(QMultiMap<Key, T> &map, Predicate pred)
bool не равно(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStream & operator<<(QDataStream &out, const QMultiMap<Key, T> &map)
bool равно(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStream & operator>>(QDataStream &in, QMultiMap<Key, T> &map)

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

QMultiMap<Key, T> — один из обобщённых классов контейнеров Qt. Он хранит пары (ключ, значение) и обеспечивает быстрый поиск по ключу.

QMultiMap и QMultiHash предоставляют очень похожую функциональность. Различия:

  • QMultiHash обеспечивает в среднем более быстрый поиск, чем QMultiMap. (См. Алгоритмическую сложность для подробностей.)
  • При итерации по QMultiHash элементы упорядочены произвольно. В QMultiMap элементы всегда упорядочены по ключу.
  • Тип ключа QMultiHash должен предоставлять оператор ==() и глобальную функцию qHash(Ключ). Тип ключа QMultiMap должен предоставлять оператор <() для указания полного порядка. Начиная с Qt 5.8.1, в качестве ключа также безопасно использовать указатели на типы, даже если подлежащий оператор <() не обеспечивает полный порядок.

Вот пример QMultiMap с ключами QString и значениями int:

QMultiMap<QString, int> multimap;

Для вставки пары (ключ, значение) в мульти-список можно использовать вставить():

multimap.insert("a", 1);
multimap.insert("b", 3);
multimap.insert("c", 7);
multimap.insert("c", -5);

Это вставляет следующие три пары (ключ, значение) в QMultiMap: ("a", 1), ("b", 3), ("c", 7) и ("c", -5); обратите внимание, что дублирующие ключи разрешены.

Для поиска значения используйте найти() или значение():

int num2 = multimap.value("a"); // 1
int num3 = multimap.value("thirteen"); // not found; 0
int num3 = 0;
auto it = multimap.value("b");
if (it != multimap.end()) {
    num3 = it.value();
}

Если в списке нет элемента с указанным ключом, эти функции возвращают значение по умолчанию.

Если нужно проверить, содержит ли список определённый ключ, используйте содержит():

int timeout = 30;
if (multimap.contains("TIMEOUT"))
    timeout = multimap.value("TIMEOUT");

// better:
auto it = multimap.find("TIMEOUT");
if (it != multimap.end())
    timeout = it.value();

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

int timeout = multimap.value("TIMEOUT", 30);

Для навигации по всем парам (ключ, значение) в QMultiMap можно использовать итератор. QMultiMap предоставляет как итераторы в стиле Java (QMultiMapIterator и QMutableMultiMapIterator), так и итераторы в стиле STL (QMultiMap::const_iterator и QMultiMap::iterator). Вот как итерировать по QMultiMap<QString, int> с помощью итератора в стиле Java:

QMultiMapIterator<QString, int> i(multimap);
while (i.hasNext()) {
    i.next();
    cout << i.key() << ": " << i.value() << Qt::endl;
}

Вот тот же код, но на этот раз с использованием итератора в стиле STL:

auto i = multimap.constBegin();
while (i != multimap.constEnd()) {
    cout << i.key() << ": " << i.value() << Qt::endl;
    ++i;
}

Элементы обрабатываются в порядке возрастания ключа.

QMultiMap допускает несколько значений на один ключ. Если вызвать вставить() с ключом, который уже существует в списке, будет вставлена новая пара (ключ, значение). Например:

multimap.insert("plenty", 100);
multimap.insert("plenty", 2000);
// multimap.size() == 2

Если нужно получить все значения для одного ключа, можно использовать values(const Key &key), которая возвращает QList<T>:

QList<int> values = multimap.values("plenty");
for (int i = 0; i < values.size(); ++i)
    cout << values.at(i) << Qt::endl;

Элементы с одинаковым ключом доступны от последнего к первому вставленному. Другой подход — вызвать найти() для получения STL-итератора для первого элемента с ключом и итерировать оттуда:

QMultiMap<QString, int>::iterator i = multimap.find("plenty");
while (i != map.end() && i.key() == "plenty") {
    cout << i.value() << Qt::endl;
    ++i;
}

// better:
auto [i, end] = multimap.equal_range("plenty");
while (i != end) {
    cout << i.value() << Qt::endl;
    ++i;
}

Если нужно только извлечь значения из списка (не ключи), можно также использовать foreach:

QMap<QString, int> multimap;
...
foreach (int value, multimap)
    cout << value << Qt::endl;

Элементы можно удалить из мульти-списка несколькими способами. Один способ — вызвать удалить(); это удалит любой элемент с заданным ключом. Другой способ — использовать QMutableMultiMapIterator::remove(). Кроме того, можно очистить весь список с помощью очистить().

Возможна слияние двух мульти-списков с помощью объединить(), оператора +() и оператора +=(). Пример:

QMultiMap<QString, int> map1, map2, map3;

map1.insert("plenty", 100);
map1.insert("plenty", 2000);
// map1.size() == 2

map2.insert("plenty", 5000);
// map2.size() == 1

map3 = map1 + map2;
// map3.size() == 3

Типы данных ключа и значения QMultiMap должны быть присваиваемыми типами данных. Это охватывает большинство типов данных, с которыми вы, вероятно, столкнётесь, но компилятор не позволит вам, например, хранить QWidget в качестве значения; вместо этого храните QWidget *. Кроме того, тип ключа QMultiMap должен предоставлять оператор <(). QMap использует его для сортировки своих элементов и предполагает, что два ключа x и y равны, если ни x < y ни y < x не истинно.

Пример:

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

class Employee
{
public:
    Employee() {}
    Employee(const QString &name, QDate dateOfBirth);
    ...

private:
    QString myName;
    QDate myDateOfBirth;
};

inline bool operator<(const Employee &e1, const Employee &e2)
{
    if (e1.name() != e2.name())
        return e1.name() < e2.name();
    return e1.dateOfBirth() < e2.dateOfBirth();
}

#endif // EMPLOYEE_H

В примере мы начинаем с сравнения имён сотрудников. Если они равны, мы сравниваем даты рождения, чтобы разрешить ничью.

См. также QMultiMapIterator, QMutableMultiMapIterator и QMultiHash.

Документация по типам членов

QMultiMap::ConstIterator

Синоним в стиле Qt для QMultiMap<Key, T>::const_iterator.

QMultiMap::Iterator

Синоним в стиле Qt для QMultiMap<Key, T>::iterator.

[since 5.10] QMultiMap::const_key_value_iterator

QMultiMap::const_key_value_iterator — это тип, предоставляющий итератор в стиле STL для QMultiMap.

QMultiMap::const_key_value_iterator по существу такой же, как QMultiMap::const_iterator с тем отличием, что оператор*() возвращает пару ключ/значение, а не значение.

Этот тип данных был введён в Qt 5.10.

См. также QKeyValueIterator.

[alias] QMultiMap::difference_type

Тип данных для ptrdiff_t. Предоставлен для совместимости со STL.

[alias] QMultiMap::key_type

Тип данных для Key. Предоставлен для совместимости со STL.

[since 5.10] QMultiMap::key_value_iterator

QMultiMap::key_value_iterator — тип, предоставляющий итератор в стиле STL для QMultiMap.

QMultiMap::key_value_iterator по существу такой же, как QMultiMap::iterator с тем отличием, что оператор*() возвращает пару ключ/значение, а не значение.

Этот тип данных был введён в Qt 5.10.

См. также QKeyValueIterator.

[alias] QMultiMap::mapped_type

Тип данных для T. Предоставлен для совместимости со STL.

[alias] QMultiMap::size_type

Тип данных для int. Предоставлен для совместимости со STL.

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

[default] QMultiMap::QMultiMap(const QMultiMap<Key, T> &other)

Создаёт копию other.

Эта операция выполняется за постоянное время, поскольку QMultiMap является неявным общим. Это делает возврат QMultiMap из функции очень быстрым. Если общий экземпляр изменяется, он будет скопирован (копирование при записи), и это займёт линейное время.

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

[default, since 5.2] QMultiMap::QMultiMap(QMultiMap<Key, T> &&other)

Создаёт экземпляр QMultiMap, ссылаясь на тот же объект, на который ссылался other.

Эта функция была введена в Qt 5.2.

QMultiMap::QMultiMap(std::multimap<Key, T> &&other)

Создаёт карту, перемещая данные из other.

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

QMultiMap::QMultiMap(const std::multimap<Key, T> &other)

Создаёт копию other.

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

[since 6.0] QMultiMap::QMultiMap(QMap<Key, T> &&other)

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

Эта функция была введена в Qt 6.0.

[since 6.0] QMultiMap::QMultiMap(const QMap<Key, T> &other)

Создаёт карту как копию other.

Эта функция была введена в Qt 6.0.

[since 5.1] QMultiMap::QMultiMap(std::initializer_list<std::pair<Key, T> > list)

Создаёт карту с копией каждого элемента из списка инициализации list.

Эта функция была введена в Qt 5.1.

QMultiMap::QMultiMap()

Создаёт пустую карту.

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

[default, since 5.2] QMultiMap<Key, T> &QMultiMap::operator=(QMultiMap<Key, T> &&other)

Присваивает other этому экземпляру QMultiMap.

Эта функция была введена в Qt 5.2.

[default] QMultiMap<Key, T> &QMultiMap::operator=(const QMultiMap<Key, T> &other)

Присваивает other этой карте и возвращает ссылку на эту карту.

[default] QMultiMap::~QMultiMap()

Удаляет карту. Ссылки на значения в карте и все итераторы этой карты становятся недействительными.

QMultiMap::iterator QMultiMap::begin()

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

См. также constBegin() и end().

QMultiMap::const_iterator QMultiMap::begin() const

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

[since 5.0] QMultiMap::const_iterator QMultiMap::cbegin() const

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

Эта функция была введена в Qt 5.0.

См. также begin() и cend().

[since 5.0] QMultiMap::const_iterator QMultiMap::cend() const

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

Эта функция была введена в Qt 5.0.

См. также cbegin() и end().

void QMultiMap::clear()

Удаляет все элементы из карты.

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

QMultiMap::const_iterator QMultiMap::constBegin() const

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

См. также begin() и constEnd().

QMultiMap::const_iterator QMultiMap::constEnd() const

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

См. также constBegin() и end().

QMultiMap::const_iterator QMultiMap::constFind(const Key &key) const

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

Если карта не содержит элемента с ключом key, функция возвращает constEnd().

См. также find() и QMultiMap::constFind().

QMultiMap::const_iterator QMultiMap::constFind(const Key &key, const T &value) const

Возвращает итератор, указывающий на элемент с ключом key и значением value в карте.

Если карта не содержит такого элемента, функция возвращает constEnd().

См. также QMap::constFind().

[since 5.10] QMultiMap::const_key_value_iterator QMultiMap::constKeyValueBegin() const

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

Эта функция была введена в Qt 5.10.

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

[since 5.10] QMultiMap::const_key_value_iterator QMultiMap::constKeyValueEnd() const

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

Эта функция была введена в Qt 5.10.

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

bool QMultiMap::contains(const Key &key) const

Возвращает true, если карта содержит элемент с ключом key; в противном случае возвращает false.

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

bool QMultiMap::contains(const Key &key, const T &value) const

Возвращает true, если карта содержит элемент с ключом key и значением value; в противном случае возвращает false.

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

QMultiMap::size_type QMultiMap::count(const Key &key) const

Возвращает количество элементов, связанных с ключом key.

См. также contains() и QMultiMap::count().

QMultiMap::size_type QMultiMap::count(const Key &key, const T &value) const

Возвращает количество элементов с ключом key и значением value.

См. также contains() и QMultiMap::count().

QMultiMap::size_type QMultiMap::count() const

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

То же самое, что и size().

bool QMultiMap::empty() const

Эта функция предоставляется для совместимости со STL. Она эквивалентна isEmpty(), возвращая true, если карта пуста; иначе возвращает false.

QMultiMap::iterator QMultiMap::end()

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

См. также begin() и constEnd().

QMultiMap::const_iterator QMultiMap::end() const

Это перегруженный метод.

QPair<QMultiMap::iterator, QMultiMap::iterator> QMultiMap::equal_range(const Key &key)

Возвращает пару итераторов, определяющих диапазон значений [first, second), сохраненных под ключом key.

[since 5.6] QPair<QMultiMap::const_iterator, QMultiMap::const_iterator> QMultiMap::equal_range(const Key &key) const

Это перегруженный метод.

Этот метод был введён в Qt 5.6.

QMultiMap::iterator QMultiMap::erase(QMultiMap::const_iterator pos)

Удаляет пару (ключ, значение), на которую указывает итератор pos, из мульти-мапы и возвращает итератор на следующий элемент в мапе.

Примечание: Итератор pos должен быть валидным и доступным для разыменования.

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

[since 6.0] QMultiMap::iterator QMultiMap::erase(QMultiMap::const_iterator first, QMultiMap::const_iterator last)

Удаляет пары (ключ, значение), на которые указывают итераторы в диапазоне [first, last) из мульти-мапы. Возвращает итератор на элемент в мульти-мапе, следующий за последним удалённым элементом.

Примечание: Диапазон [first, last) должен быть валидным в *this.

Этот метод был введён в Qt 6.0.

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

QMultiMap::iterator QMultiMap::find(const Key &key)

Возвращает итератор, указывающий на элемент с ключом key в мульти-мапе.

Если в мульти-мапе нет элемента с ключом key, функция возвращает end().

Если в мапе есть несколько элементов с ключом key, эта функция возвращает итератор, указывающий на значение, которое было вставлено последним. Другие значения можно получить, увеличивая итератор. Например, вот код, который итерирует по всем элементам с одинаковым ключом:

QMultiMap<QString, int>::iterator i = multimap.find("plenty");
while (i != map.end() && i.key() == "plenty") {
    cout << i.value() << Qt::endl;
    ++i;
}

// better:
auto [i, end] = multimap.equal_range("plenty");
while (i != end) {
    cout << i.value() << Qt::endl;
    ++i;
}

См. также constFind(), value(), values(), lowerBound() и upperBound().

QMultiMap::const_iterator QMultiMap::find(const Key &key) const

Это перегруженный метод.

QMultiMap::const_iterator QMultiMap::find(const Key &key, const T &value) const

Это перегруженный метод.

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

Если в мапе нет такого элемента, функция возвращает end().

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

[since 5.2] T &QMultiMap::first()

Возвращает ссылку на первое значение в мульти-мапе, т.е. значение, сопоставленное с наименьшим ключом. Эта функция предполагает, что мульти-мапа не пуста.

При отсутствии общих ссылок (или при вызове константной версии) это выполняется за постоянное время.

Этот метод был введён в Qt 5.2.

См. также last(), firstKey() и isEmpty().

[since 5.2] const T &QMultiMap::first() const

Это перегруженный метод.

Этот метод был введён в Qt 5.2.

[since 5.2] const Key &QMultiMap::firstKey() const

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

Это выполняется за постоянное время.

Этот метод был введён в Qt 5.2.

См. также lastKey(), first(), keyBegin() и isEmpty().

QMultiMap::iterator QMultiMap::insert(const Key &key, const T &value)

Вставляет новый элемент с ключом key и значением value.

Если в мапе уже есть элемент с тем же ключом, эта функция просто создаст новый. (Это поведение отличается от replace(), которое перезаписывает значение существующего элемента.)

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

[since 5.1] QMultiMap::iterator QMultiMap::insert(QMultiMap::const_iterator pos, const Key &key, const T &value)

Это перегруженный метод.

Вставляет новый элемент с ключом key и значением value, используя подсказку pos, которая указывает, где лучше выполнить вставку.

Если в качестве подсказки используется constBegin(), это означает, что key меньше, чем любой ключ в мульти-мапе, а constEnd() предполагает, что key (строго) больше, чем любой ключ в мульти-мапе. В противном случае подсказка должна удовлетворять условию (pos - 1).key() < key <= pos.key(). Если подсказка pos неверна, она игнорируется, и выполняется обычная вставка.

Если подсказка верна и мульти-мапа не является общей, вставка выполняется за амортизированное постоянное время.

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

При создании мульти-мапы из отсортированных данных вставка наибольшего ключа сначала с помощью constBegin() быстрее, чем вставка в отсортированном порядке с помощью constEnd(), поскольку constEnd() - 1 (которое необходимо проверить, чтобы определить, является ли подсказка действительной) требует логарифмического времени.

Примечание: Будьте осторожны с подсказкой. Предоставление итератора из более старой общей ссылки может привести к ошибке, но также существует риск, что это будет незаметно повреждать как мульти-мапу, так и мульти-мапу pos.

Этот метод был введён в Qt 5.1.

bool QMultiMap::isEmpty() const

Возвращает true если мульти-мапа не содержит элементов; в противном случае возвращает false.

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

Key QMultiMap::key(const T &value, const Key &defaultKey = Key()) const

Это перегруженный метод.

Возвращает первый ключ со значением value или defaultKey, если мульти-мапа не содержит элемента со значением value. Если defaultKey не указан, функция возвращает ключ, созданный по умолчанию.

Эта функция может быть медленной (линейное время), так как внутренняя структура данных QMultiMap оптимизирована для быстрого поиска по ключу, а не по значению.

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

[since 5.6] QMultiMap::key_iterator QMultiMap::keyBegin() const

Возвращает постоянный итератор в стиле STL, указывающий на первый ключ в мульти-мапе.

Этот метод был введён в Qt 5.6.

См. также keyEnd() и firstKey().

[since 5.6] QMultiMap::key_iterator QMultiMap::keyEnd() const

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

Этот метод был введён в Qt 5.6.

См. также keyBegin() и lastKey().

[since 5.10] QMultiMap::key_value_iterator QMultiMap::keyValueBegin()

Возвращает итератор в стиле STL, указывающий на первую запись в мульти-мапе.

Этот метод был введён в Qt 5.10.

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

[since 5.10] QMultiMap::const_key_value_iterator QMultiMap::keyValueBegin() const

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

Этот метод был введён в Qt 5.10.

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

[since 5.10] QMultiMap::key_value_iterator QMultiMap::keyValueEnd()

Возвращает итератор в стиле STL, указывающий на воображаемую запись после последней записи в множественном отображении.

Эта функция была добавлена в Qt 5.10.

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

[since 5.10] QMultiMap::const_key_value_iterator QMultiMap::keyValueEnd() const

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

Эта функция была добавлена в Qt 5.10.

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

QList<Key> QMultiMap::keys() const

Возвращает список, содержащий все ключи в множественном отображении в порядке возрастания. Ключи, которые встречаются несколько раз в множественном отображении, также встречаются несколько раз в списке.

Порядок гарантированно совпадает с порядком, используемым функцией values().

Эта функция создаёт новый список за время, пропорциональное количеству элементов (линейное время). Время и использование памяти, связанные с этим, можно избежать, проитерировавшись от keyBegin() до keyEnd().

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

QList<Key> QMultiMap::keys(const T &value) const

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

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

Эта функция может быть медленной (линейное время), поскольку внутренняя структура данных QMultiMap оптимизирована для быстрого поиска по ключу, а не по значению.

[since 5.2] T &QMultiMap::last()

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

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

Эта функция была добавлена в Qt 5.2.

См. также first(), lastKey() и isEmpty().

[since 5.2] const T &QMultiMap::last() const

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

Эта функция была добавлена в Qt 5.2.

[since 5.2] const Key &QMultiMap::lastKey() const

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

Это выполняется за время, пропорциональное логарифму количества элементов (логарифмическое время).

Эта функция была добавлена в Qt 5.2.

См. также firstKey(), last(), keyEnd() и isEmpty().

QMultiMap::iterator QMultiMap::lowerBound(const Key &key)

Возвращает итератор, указывающий на первую запись с ключом key в отображении. Если отображение не содержит записи с ключом key, функция возвращает итератор на ближайшую запись с большим ключом.

Пример:

QMultiMap<int, QString> multimap;
multimap.insert(1, "one");
multimap.insert(5, "five");
multimap.insert(5, "five (2)");
multimap.insert(10, "ten");

multimap.lowerBound(0);      // returns iterator to (1, "one")
multimap.lowerBound(1);      // returns iterator to (1, "one")
multimap.lowerBound(2);      // returns iterator to (5, "five")
multimap.lowerBound(5);      // returns iterator to (5, "five")
multimap.lowerBound(6);      // returns iterator to (10, "ten")
multimap.lowerBound(10);     // returns iterator to (10, "ten")
multimap.lowerBound(999);    // returns end()

Если отображение содержит несколько записей с ключом key, эта функция возвращает итератор, указывающий на значение, вставленное последним. Другие значения доступны, увеличивая итератор. Например, вот код, который перебирает все записи с одинаковым ключом:

QMap<QString, int> multimap;
...
QMap<QString, int>::const_iterator i = multimap.lowerBound("HDR");
QMap<QString, int>::const_iterator upperBound = multimap.upperBound("HDR");
while (i != upperBound) {
    cout << i.value() << Qt::endl;
    ++i;
}

См. также upperBound() и find().

QMultiMap::const_iterator QMultiMap::lowerBound(const Key &key) const

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

QMultiMap::size_type QMultiMap::remove(const Key &key)

Удаляет все записи с ключом key из множественного отображения. Возвращает количество удалённых записей.

См. также clear() и take().

QMultiMap::size_type QMultiMap::remove(const Key &key, const T &value)

Удаляет все записи с ключом key и значением value из множественного отображения. Возвращает количество удалённых записей.

См. также clear() и take().

[since 6.1] template <typename Predicate> QMultiMap::size_type QMultiMap::removeIf(Predicate pred)

Удаляет все элементы, для которых предикат pred возвращает true, из множественного отображения.

Функция поддерживает предикаты, которые принимают аргумент типа QMultiMap<Key, T>::iterator, или аргумент типа std::pair<const Key &, T &>.

Возвращает количество удалённых элементов (если таковые есть).

Эта функция была добавлена в Qt 6.1.

См. также clear() и take().

QMultiMap::iterator QMultiMap::replace(const Key &key, const T &value)

Вставляет новую запись с ключом key и значением value.

Если запись с ключом key уже существует, значение этой записи заменяется на value.

Если существует несколько записей с ключом key, значение последней вставленной записи заменяется на value.

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

QMultiMap::size_type QMultiMap::size() const

Возвращает количество пар (ключ, значение) в множественном отображении.

См. также isEmpty() и count().

void QMultiMap::swap(QMultiMap<Key, T> &other)

Меняет местами множественное отображение other и это множественное отображение. Эта операция очень быстрая и никогда не завершается ошибкой.

T QMultiMap::take(const Key &key)

Удаляет запись с ключом key из множественного отображения и возвращает ассоциированное с ней значение.

Если запись не существует в множественном отображении, функция просто возвращает значение, инициализированное по умолчанию. Если в отображении существует несколько записей с ключом key, удаляется и возвращается только последняя вставленная.

Если вам не нужно возвращаемое значение, функция remove() более эффективна.

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

std::multimap<Key, T> QMultiMap::toStdMultiMap() const &

Возвращает эквивалентное STL-множественное отображение для этого QMultiMap.

QList<Key> QMultiMap::uniqueKeys() const

Возвращает список, содержащий все ключи в отображении в порядке возрастания. Ключи, которые встречаются несколько раз в отображении, встречаются только один раз в возвращаемом списке.

QMultiMap<Key, T> &QMultiMap::unite(const QMultiMap<Key, T> &other)

Вставляет все записи из отображения other в это отображение. Если ключ встречается в обоих отображениях, в результате отображении ключ будет встречаться несколько раз.

QMultiMap<Key, T> &QMultiMap::unite(QMultiMap<Key, T> &&other)

Перемещает все записи из отображения other в это отображение. Если ключ встречается в обоих отображениях, в результате отображении ключ будет встречаться несколько раз.

Если other является совмещенным, то элементы будут скопированы вместо перемещения.

QMultiMap::iterator QMultiMap::upperBound(const Key &key)

Возвращает итератор, указывающий на запись, непосредственно следующую за последней записью с ключом key в отображении. Если отображение не содержит записи с ключом key, функция возвращает итератор на ближайшую запись с большим ключом.

Пример:

QMultiMap<int, QString> multimap;
multimap.insert(1, "one");
multimap.insert(5, "five");
multimap.insert(5, "five (2)");
multimap.insert(10, "ten");

multimap.upperBound(0);      // returns iterator to (1, "one")
multimap.upperBound(1);      // returns iterator to (5, "five")
multimap.upperBound(2);      // returns iterator to (5, "five")
multimap.lowerBound(5);      // returns iterator to (5, "five (2)")
multimap.lowerBound(6);      // returns iterator to (10, "ten")
multimap.upperBound(10);     // returns end()
multimap.upperBound(999);    // returns end()

См. также lowerBound() и find().

QMultiMap::const_iterator QMultiMap::upperBound(const Key &key) const

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

T QMultiMap::value(const Key &key, const T &defaultValue = T()) const

Возвращает значение, связанное с ключом key.

Если множественное отображение не содержит записи с ключом key, функция возвращает defaultValue. Если defaultValue не указан, функция возвращает значение, инициализированное по умолчанию. Если в отображении существует несколько записей с ключом key, возвращается значение последней вставленной.

См. также key(), values() и contains().

QList<T> QMultiMap::values() const

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

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

QList<T> QMultiMap::values(const Key &key) const

Возвращает список, содержащий все значения, связанные с ключом key, от последнего вставленного до первого.

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

Связанные нечленные функции

[since 6.1] template <typename Key, typename T, typename Predicate> qsizetype erase_if(QMultiMap<Key, T> &map, Predicate pred)

Удаляет все элементы, для которых предикат pred возвращает true, из отображения map.

Функция поддерживает предикаты, которые принимают аргумент типа QMultiMap<Key, T>::iterator, или аргумент типа std::pair<const Key &, T &>.

Возвращает количество удалённых элементов, если таковые имелись.

Эта функция была добавлена в Qt 6.1.

bool operator!=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

Возвращает true если lhs не равно rhs; в противном случае возвращает false.

Два отображения считаются равными, если они содержат одинаковые пары (ключ, значение) в том же порядке (что важно для дублирующихся ключей).

Для этой функции требуется, чтобы типы ключа и значения реализовывали operator==().

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

template <typename Key, typename T> QDataStream &operator<<(QDataStream &out, const QMultiMap<Key, T> &map)

Записывает отображение map в поток out.

Для этой функции требуется, чтобы типы ключа и значения реализовывали operator<<().

См. также Формат операторов QDataStream.

bool operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

Возвращает true если lhs равно rhs; в противном случае возвращает false.

Два отображения считаются равными, если они содержат одинаковые пары (ключ, значение) в том же порядке (что важно для дублирующихся ключей).

Для этой функции требуется, чтобы типы ключа и значения реализовывали operator==().

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

template <typename Key, typename T> QDataStream &operator>>(QDataStream &in, QMultiMap<Key, T> &map)

Читает отображение из потока in в map.

Для этой функции требуется, чтобы типы ключа и значения реализовывали operator>>().

См. также Формат операторов QDataStream.

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

Spec-Zone.ru

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