Класс 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.
[since 5.0] QMultiMap::const_iterator QMultiMap::cend() const
Возвращает постоянный итератор STL, указывающий на воображаемый элемент после последнего элемента в карте множеств.
Эта функция была добавлена в Qt 5.0.
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 оптимизирована для быстрого поиска по ключу, а не по значению.
[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().
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)
Удаляет из множественного отображения 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