Spec-Zone.ru › Qt 6.0

Класс 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
разность_типов
тип_ключа
итератор_ключевое_значение
тип_отображения
тип_размера

Функции публичного доступа

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

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

QTypeTraits::compare_eq_result<AKey, AT> operator!=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStreamIfHasOStreamOperators<Key, T> operator<<(QDataStream &out, const QMultiMap<Key, T> &map)
QTypeTraits::compare_eq_result<AKey, AT> operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStreamIfHasIStreamOperators<Key, T> operator>>(QDataStream &in, QMultiMap<Key, T> &map)

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

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

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

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

Вот пример 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 должен предоставлять operator<(). 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, за исключением того, что operator*() возвращает пару ключ/значение вместо значения.

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

См. также QKeyValueIterator.

[alias] QMultiMap::difference_type

Тип, используемый для указания разницы между итераторами. Предоставляется для совместимости со STL.

[alias] QMultiMap::key_type

Тип ключа. Предоставляется для совместимости со STL.

[since 5.10] QMultiMap::key_value_iterator

QMultiMap::key_value_iterator предоставляет итератор в стиле STL для QMultiMap.

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

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

См. также QKeyValueIterator.

[alias] QMultiMap::mapped_type

Тип значения. Предоставляется для совместимости со STL.

[alias] QMultiMap::size_type

Тип, используемый для представления размера контейнера. Предоставляется для совместимости со 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()

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

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

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

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

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

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

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

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

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

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().

END_OF_DOCUMENT_MARKER

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

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.0/qmultimap.html

Spec-Zone.ru

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