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