Spec-Zone.ru › Qt 6.1

Класс QMultiMap

шаблон <typename Key, typename T> class 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)
QTypeTraits::compare_eq_result<AKey, AT> !=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStreamIfHasOStreamOperators<Key, T> <<(QDataStream &out, const QMultiMap<Key, T> &map)
QTypeTraits::compare_eq_result<AKey, AT> ==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStreamIfHasIStreamOperators<Key, T> >>(QDataStream &in, QMultiMap<Key, T> &map)

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

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

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

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

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

QMultiMap<QString, int> multimap;

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

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); обратите внимание, что допускаются дублирующиеся ключи.

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

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();
}

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

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

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

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

Также существует перегрузка 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 допускает несколько значений на один ключ. Если вызвать insert() с ключом, который уже существует в массиве, будет вставлена новая пара (ключ, значение). Например:

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;

Элементы с одинаковым ключом доступны от последнего к первому вставленному. Другой подход — вызвать find() для получения 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;

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

Можно объединить два многозначных массива, вызвав объединить(), используя оператор+() и оператор+=(). Пример:

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 из функции очень быстрым. Если экземпляр с совместным использованием изменяется, он будет скопирован (copy-on-write), и это занимает линейное время.

См. также 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()

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

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

QMultiMap::const_iterator QMultiMap::begin() const

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

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

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

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

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

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

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

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

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

void QMultiMap::clear()

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

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

QMultiMap::const_iterator QMultiMap::constBegin() const

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

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

QMultiMap::const_iterator QMultiMap::constEnd() const

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

См. также 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

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

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

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

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

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

Эта функция была добавлена в 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()

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

См. также 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, из множественного отображения и возвращает итератор на следующий элемент в отображении.

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

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

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

Данная функция была добавлена в 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()

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

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

Данная функция была добавлена в 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().

END_OF_DOCUMENT_MARKER

[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)

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

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

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

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

template <typename AKey, typename AT> QTypeTraits::compare_eq_result<AKey, AT> operator!=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

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

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

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

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

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

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

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

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

template <typename AKey, typename AT> QTypeTraits::compare_eq_result<AKey, AT> operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

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

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

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

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

template <typename Key, typename T> QDataStreamIfHasIStreamOperators<Key, T> 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.1/qmultimap.html

Spec-Zone.ru

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