Класс 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.
[since 5.0] QMultiMap::const_iterator QMultiMap::cend() const
Возвращает постоянный итератор, указывающий на мнимый элемент после последнего элемента в карте.
Эта функция была введена в Qt 5.0.
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 оптимизирована для быстрого поиска по ключу, а не по значению.
[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().
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 из множественного отображения. Возвращает количество удалённых записей.
QMultiMap::size_type QMultiMap::remove(const Key &key, const T &value)
Удаляет все записи с ключом key и значением value из множественного отображения. Возвращает количество удалённых записей.
[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.
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
Возвращает список, содержащий все значения в отображении, в порядке возрастания их ключей. Если ключ ассоциирован с несколькими значениями, все его значения будут в списке, а не только самое последнее вставленное.
QList<T> QMultiMap::values(const Key &key) const
Возвращает список, содержащий все значения, связанные с ключом key, от последнего вставленного до первого.
Связанные нечленные функции
[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