Spec-Zone.ru › Qt 6.0

Класс QSet

шаблон <typename T> класс QSet

Класс QSet — это шаблонный класс, предоставляющий множество на основе хеш-таблицы. Подробнее...

Заголовок: #include <QSet>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются реентерабельными.

Типы публичного доступа

класс const_iterator
класс iterator
ConstIterator
Iterator
const_pointer
const_reference
difference_type
key_type
pointer
reference
size_type
value_type

Публичные функции

QSet(InputIterator first, InputIterator last)
QSet(std::initializer_list<T> list)
QSet()
QSet::const_iterator begin() const
QSet::iterator begin()
qsizetype capacity() const
QSet::const_iterator cbegin() const
QSet::const_iterator cend() const
void clear()
QSet::const_iterator constBegin() const
QSet::const_iterator constEnd() const
QSet::const_iterator constFind(const T &value) const
bool contains(const T &value) const
bool contains(const QSet<T> &other) const
qsizetype count() const
bool empty() const
QSet::const_iterator end() const
QSet::iterator end()
QSet::iterator erase(QSet::const_iterator pos)
QSet::const_iterator find(const T &value) const
QSet::iterator find(const T &value)
QSet::iterator insert(const T &value)
QSet<T> & intersect(const QSet<T> &other)
bool intersects(const QSet<T> &other) const
bool isEmpty() const
bool remove(const T &value)
void reserve(qsizetype size)
qsizetype size() const
void squeeze()
QSet<T> & subtract(const QSet<T> &other)
void swap(QSet<T> &other)
QSet<T> & unite(const QSet<T> &other)
QList<T> values() const
QTypeTraits::compare_eq_result<U> operator!=(const QSet<T> &other) const
QSet<T> operator&(const QSet<T> &other) const
QSet<T> & operator&=(const QSet<T> &other)
QSet<T> & operator&=(const T &value)
QSet<T> operator+(const QSet<T> &other) const
QSet<T> & operator+=(const QSet<T> &other)
QSet<T> & operator+=(const T &value)
QSet<T> operator-(const QSet<T> &other) const
QSet<T> & operator-=(const QSet<T> &other)
QSet<T> & operator-=(const T &value)
QSet<T> & operator<<(const T &value)
QTypeTraits::compare_eq_result<U> operator==(const QSet<T> &other) const
QSet<T> operator|(const QSet<T> &other) const
QSet<T> & operator|=(const QSet<T> &other)
QSet<T> & operator|=(const T &value)

Связанные нечленные функции

QDataStreamIfHasOStreamOperators<T> operator<<(QDataStream &out, const QSet<T> &set)
QDataStreamIfHasIStreamOperators<T> operator>>(QDataStream &in, QSet<T> &set)

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

QSet<T> — один из универсальных классов контейнеров Qt. Он хранит значения в неопределённом порядке и обеспечивает очень быстрый поиск значений. Внутри QSet<T> реализован как QHash.

Вот пример QSet со значениями QString:

QSet<QString> set;

Чтобы вставить значение в множество, используйте insert():

set.insert("one");
set.insert("three");
set.insert("seven");

Другой способ вставки элементов в множество — использование оператора <<:

set << "twelve" << "fifteen" << "nineteen";

Чтобы проверить, принадлежит ли элемент множеству, используйте contains():

if (!set.contains("ninety-nine"))
    ...

Если вы хотите перебрать все значения, хранящиеся в QSet, вы можете использовать итератор. QSet поддерживает итераторы в стиле Java (QSetIterator и QMutableSetIterator) и итераторы в стиле STL (QSet::iterator и QSet::const_iterator). Вот как перебрать QSet<QWidget *> с помощью итератора в стиле Java:

QSetIterator<QWidget *> i(set);
while (i.hasNext())
    qDebug() << i.next();

Вот тот же код, но с использованием итератора в стиле STL:

QSet<QWidget *>::const_iterator i = set.constBegin();
while (i != set.constEnd()) {
    qDebug() << *i;
    ++i;
}

QSet неупорядочен, поэтому порядок последовательности итератора не может быть предсказуемым. Если требуется упорядочение по ключу, используйте QMap.

Чтобы перебрать QSet, также можно использовать foreach:

QSet<QString> set;
...
foreach (const QString &value, set)
    qDebug() << value;

Элементы могут быть удалены из множества с помощью remove(). Также есть функция clear(), которая удаляет все элементы.

Тип данных значений QSet должен быть типом данных, присваиваемым. Например, вы не можете хранить QWidget в качестве значения; вместо этого храните QWidget *. Кроме того, тип должен обеспечивать operator==(), и должна также существовать глобальная функция qHash() возвращающая значение хеша для аргумента типа ключа. См. документацию QHash для списка типов, поддерживаемых функцией qHash().

Внутри QSet используется хеш-таблица для выполнения поиска. Хеш-таблица автоматически увеличивается и уменьшается, обеспечивая быстрый поиск без потери памяти. Вы по-прежнему можете контролировать размер хеш-таблицы, вызвав reserve(), если вы уже знаете приблизительно, сколько элементов будет содержать QSet, но это не обязательно для получения хорошей производительности. Вы также можете вызвать capacity() для получения размера хеш-таблицы.

См. также QSetIterator, QMutableSetIterator, QHash и QMap.

Документация по типам членов

QSet::ConstIterator

Синоним Qt-стиля для QSet::const_iterator.

QSet::Iterator

Синоним Qt-стиля для QSet::iterator.

QSet::const_pointer

Тип-псевдоним для const T *. Предоставлено для совместимости со STL.

QSet::const_reference

Тип-псевдоним для const T &. Предоставлено для совместимости со STL.

QSet::difference_type

Тип-псевдоним для const ptrdiff_t. Предоставлено для совместимости со STL.

QSet::key_type

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

QSet::pointer

Тип-псевдоним для T *. Предоставлено для совместимости со STL.

QSet::reference

Тип-псевдоним для T &. Предоставлено для совместимости со STL.

QSet::size_type

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

QSet::value_type

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

Документация по функциям-членам

QSet<T> QSet::operator+(const QSet<T> &other) const

QSet<T> QSet::operator|(const QSet<T> &other) const

Возвращает новый QSet, который является объединением этого множества и множества other.

См. также unite(), operator|=(), operator&() и operator-().

QSet<T> &QSet::operator+=(const QSet<T> &other)

QSet<T> &QSet::operator|=(const QSet<T> &other)

То же самое, что и unite(other).

См. также operator|(), operator&=() и operator-=().

QSet<T> &QSet::operator+=(const T &value)

QSet<T> &QSet::operator<<(const T &value)

QSet<T> &QSet::operator|=(const T &value)

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

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

[since 5.14] template <typename InputIterator> QSet::QSet(InputIterator first, InputIterator last)

Создаёт множество с содержимым в диапазоне итераторов [first, last).

Тип значения InputIterator должен быть преобразуем к T.

Примечание: Если диапазон [first, last) содержит повторяющиеся элементы, первый из них сохраняется.

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

[since 5.1] QSet::QSet(std::initializer_list<T> list)

Создаёт множество с копией каждого из элементов в списке инициализации list.

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

QSet::QSet()

Создаёт пустое множество.

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

QSet::const_iterator QSet::begin() const

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

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

QSet::iterator QSet::begin()

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

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

qsizetype QSet::capacity() const

Возвращает количество бакетов в внутренней хеш-таблице множества.

Единственная цель этой функции — предоставить способ точного регулирования использования памяти QSet. Как правило, вам редко понадобится вызывать эту функцию. Если вы хотите узнать, сколько элементов находится в множестве, вызовите size().

См. также reserve() и squeeze().

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

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

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

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

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

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

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

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

void QSet::clear()

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

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

QSet::const_iterator QSet::constBegin() const

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

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

QSet::const_iterator QSet::constEnd() const

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

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

QSet::const_iterator QSet::constFind(const T &value) const

Возвращает константную итератор, размещённую на элементе value в множестве. Если множество не содержит элемента value, функция возвращает constEnd().

См. также find() и contains().

bool QSet::contains(const T &value) const

Возвращает true если множество содержит элемент value; в противном случае возвращает false.

См. также insert(), remove() и find().

bool QSet::contains(const QSet<T> &other) const

Возвращает true если множество содержит все элементы из множества other; в противном случае возвращает false.

См. также insert(), remove() и find().

qsizetype QSet::count() const

То же самое, что и size().

bool QSet::empty() const

Возвращает true если множество пустое. Эта функция предоставлена для совместимости со STL. Она эквивалентна isEmpty().

QSet::const_iterator QSet::end() const

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

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

QSet::iterator QSet::end()

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

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

[since 5.7] QSet::iterator QSet::erase(QSet::const_iterator pos)

Удаляет элемент по позиции итератора pos из множества и возвращает итератор, размещённый на следующем элементе множества.

В отличие от remove(), эта функция никогда не заставляет QSet перехешировать свою внутреннюю структуру данных. Это означает, что её можно безопасно вызывать во время итерирования, и она не повлияет на порядок элементов в множестве.

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

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

QSet::const_iterator QSet::find(const T &value) const

Возвращает const-итератор, размещённый на элементе value в множестве. Если множество не содержит элемента value, функция возвращает constEnd().

См. также constFind() и contains().

QSet::iterator QSet::find(const T &value)

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

Возвращает не-const итератор, размещённый на элементе value в множестве. Если множество не содержит элемента value, функция возвращает end().

QSet::iterator QSet::insert(const T &value)

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

См. также operator<<(), remove() и contains().

QSet<T> &QSet::intersect(const QSet<T> &other)

Удаляет из текущего множества все элементы, которые не содержатся в множестве other. Возвращает ссылку на текущее множество.

См. также intersects(), operator&=(), unite() и subtract().

[since 5.6] bool QSet::intersects(const QSet<T> &other) const

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

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

См. также contains() и intersect().

bool QSet::isEmpty() const

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

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

bool QSet::remove(const T &value)

Удаляет любое вхождение элемента value из множества. Возвращает true, если элемент был удалён; в противном случае возвращает false.

См. также contains() и insert().

void QSet::reserve(qsizetype size)

Гарантирует, что внутренняя хеш-таблица множества состоит как минимум из size бакетов.

Эта функция полезна для кода, которому нужно создать большое множество и избежать многократной переаллокации. Например:

QSet<QString> set;
set.reserve(20000);
for (int i = 0; i < 20000; ++i)
    set.insert(values[i]);

В идеале, size должно быть немного больше максимального ожидаемого количества элементов в множестве. size не обязательно должно быть простым числом, так как QSet будет использовать простое число внутри. Если size является заниженной оценкой, худшее, что произойдёт, — это то, что QSet будет работать немного медленнее.

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

См. также squeeze() и capacity().

qsizetype QSet::size() const

Возвращает количество элементов в множестве.

См. также isEmpty() и count().

void QSet::squeeze()

Уменьшает размер внутренней хеш-таблицы множества для экономии памяти.

Единственная цель этой функции — предоставить способ тонкой настройки использования памяти QSet. В общем случае, вам вряд ли придётся вызывать эту функцию.

См. также reserve() и capacity().

QSet<T> &QSet::subtract(const QSet<T> &other)

Удаляет из текущего множества все элементы, которые содержатся в множестве other. Возвращает ссылку на текущее множество.

См. также operator-=(), unite() и intersect().

void QSet::swap(QSet<T> &other)

Меняет местами множество other с текущим множеством. Эта операция очень быстрая и никогда не завершается неудачей.

QSet<T> &QSet::unite(const QSet<T> &other)

Каждый элемент множества other, который ещё не содержится в текущем множестве, вставляется в текущее множество. Возвращает ссылку на текущее множество.

См. также operator|=(), intersect() и subtract().

QList<T> QSet::values() const

Возвращает новый QList, содержащий элементы множества. Порядок элементов в QList не определён.

Примечание: Начиная с Qt 5.14, доступны конструкторы диапазонов для общих контейнерных классов Qt и их следует использовать вместо этого метода.

Эта функция создаёт новый список за линейное время. Сопутствующее использование времени и памяти можно избежать, итерируя от constBegin() до constEnd().

template <typename U> QTypeTraits::compare_eq_result<U> QSet::operator!=(const QSet<T> &other) const

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

Два множества считаются равными, если они содержат одинаковые элементы.

Эта функция требует, чтобы тип значения реализовывал operator==().

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

QSet<T> QSet::operator&(const QSet<T> &other) const

Возвращает новое множество QSet, которое является пересечением текущего множества и множества other.

См. также intersect(), operator&=(), operator|() и operator-().

QSet<T> &QSet::operator&=(const QSet<T> &other)

То же самое, что intersect(other).

См. также operator&(), operator|=() и operator-=().

QSet<T> &QSet::operator&=(const T &value)

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

То же самое, что intersect(other), если мы рассматриваем other как множество, содержащее только элемент value.

QSet<T> QSet::operator-(const QSet<T> &other) const

Возвращает новое множество QSet, которое является разностью текущего множества и множества other, т.е. текущее множество - other множество.

См. также subtract(), operator-=(), operator|() и operator&().

QSet<T> &QSet::operator-=(const QSet<T> &other)

То же самое, что subtract(other).

См. также operator-(), operator|=() и operator&=().

QSet<T> &QSet::operator-=(const T &value)

Удаляет вхождение элемента value из множества, если оно найдено, и возвращает ссылку на множество. Если value не содержится в множестве, ничего не удаляется.

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

template <typename U> QTypeTraits::compare_eq_result<U> QSet::operator==(const QSet<T> &other) const

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

Два множества считаются равными, если они содержат одни и те же элементы.

Для этой функции требуется, чтобы тип значения реализовывал operator==().

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

Связанные нечленные функции

template <typename T> QDataStreamIfHasOStreamOperators<T> operator<<(QDataStream &out, const QSet<T> &set)

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

Для этой функции требуется, чтобы тип значения реализовывал operator<<().

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

template <typename T> QDataStreamIfHasIStreamOperators<T> operator>>(QDataStream &in, QSet<T> &set)

Считывает множество из потока in в set.

Для этой функции требуется, чтобы тип значения реализовывал operator>>().

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

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qset.html

Spec-Zone.ru

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