Spec-Zone.ru › Qt 5.9

Класс QSet

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

Заголовок: #include <QSet>
qmake: QT += core
  • Список всех членов, включая наследуемые

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

Типы

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

Открытые функции

QSet()
QSet(std::initializer_list<T> list)
const_iterator begin() const
iterator begin()
int capacity() const
const_iterator cbegin() const
const_iterator cend() const
void clear()
const_iterator constBegin() const
const_iterator constEnd() const
const_iterator constFind(const T &value) const
bool contains(const T &value) const
bool contains(const QSet<T> &other) const
int count() const
const_reverse_iterator crbegin() const
const_reverse_iterator crend() const
bool empty() const
const_iterator end() const
iterator end()
iterator erase(const_iterator pos)
iterator erase(iterator pos)
const_iterator find(const T &value) const
iterator find(const T &value)
iterator insert(const T &value)
QSet<T> & intersect(const QSet<T> &other)
bool intersects(const QSet<T> &other) const
bool isEmpty() const
reverse_iterator rbegin()
const_reverse_iterator rbegin() const
bool remove(const T &value)
reverse_iterator rend()
const_reverse_iterator rend() const
void reserve(int size)
int size() const
void squeeze()
QSet<T> & subtract(const QSet<T> &other)
void swap(QSet<T> &other)
QList<T> toList() const
QSet<T> & unite(const QSet<T> &other)
QList<T> values() const
bool 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)
bool 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> fromList(const QList<T> &list)

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

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

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

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

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's тип данных значения должен быть присваиваемым типом данных. Например, нельзя хранить QWidget в качестве значения; вместо этого храните QWidget *. Кроме того, тип должен предоставлять operator==(), а также должна быть глобальная функция qHash(), возвращающая хэш-значение для аргумента типа ключа. Список типов, поддерживаемых qHash(), см. в документации к QHash.

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

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

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

typedef QSet::ConstIterator

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

typedef QSet::Iterator

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

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

typedef QSet::const_pointer

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

typedef QSet::const_reference

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

typedef QSet::const_reverse_iterator

typedef QSet::const_reverse_iterator предоставляет итератор обратного порядка STL-стиля для QSet.

Это просто typedef для std::reverse_iterator<QSet::const_iterator>.

Предупреждение: Итераторы неявно разделяемых контейнеров не работают точно как итераторы STL. Следует избегать копирования контейнера, пока итераторы активны для этого контейнера. Для получения дополнительной информации см. Проблему итераторов при неявном совместном использовании.

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

См. также QSet::rbegin(), QSet::rend(), QSet::reverse_iterator и QSet::const_iterator.

typedef QSet::difference_type

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

typedef QSet::key_type

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

typedef QSet::pointer

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

typedef QSet::reference

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

typedef QSet::reverse_iterator

typedef QSet::reverse_iterator предоставляет итератор обратного неконстантного порядка STL-стиля для QSet.

Это просто typedef для std::reverse_iterator<QSet::iterator>.

Предупреждение: Итераторы неявно разделяемых контейнеров не работают точно как итераторы STL. Следует избегать копирования контейнера, пока итераторы активны для этого контейнера. Для получения дополнительной информации см. Проблему итераторов при неявном совместном использовании.

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

См. также QSet::rbegin(), QSet::rend(), QSet::const_reverse_iterator и QSet::iterator.

typedef QSet::size_type

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

typedef QSet::value_type

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

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

QSet::QSet()

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

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

QSet::QSet(std::initializer_list<T> list)

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

Эта функция доступна только при компиляции программы в режиме C++11.

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

const_iterator QSet::begin() const

Возвращает const итератор в стиле STL, расположенный в начале множества.

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

iterator QSet::begin()

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

Возвращает неконстантный итератор в стиле STL, расположенный в начале множества.

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

int QSet::capacity() const

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

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

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

const_iterator QSet::cbegin() const

Возвращает const итератор в стиле STL, расположенный в начале множества.

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

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

const_iterator QSet::cend() const

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

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

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

void QSet::clear()

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

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

const_iterator QSet::constBegin() const

Возвращает const итератор в стиле STL, расположенный в начале множества.

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

const_iterator QSet::constEnd() const

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

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

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

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

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

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

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

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

int QSet::count() const

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

const_reverse_iterator QSet::crbegin() const

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

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

См. также begin(), rbegin() и rend().

const_reverse_iterator QSet::crend() const

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

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

См. также end(), rend() и rbegin().

bool QSet::empty() const

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

const_iterator QSet::end() const

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

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

iterator QSet::end()

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

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

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

iterator QSet::erase(const_iterator pos)

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

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

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

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

iterator QSet::erase(iterator pos)

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

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

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

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

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

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

iterator QSet::find(const T &value)

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

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

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

[static] QSet<T> QSet::fromList(const QList<T> &list)

Возвращает новый объект QSet, содержащий данные из list. Поскольку QSet не допускает дубликатов, результирующий QSet может быть меньше, чем list, так как QList может содержать дубликаты.

Пример:

QStringList list;
list << "Julia" << "Mike" << "Mike" << "Julia" << "Julia";

QSet<QString> set = QSet<QString>::fromList(list);
set.contains("Julia");  // returns true
set.contains("Mike");   // returns true
set.size();             // returns 2

См. также toList() и QList::toSet().

iterator QSet::insert(const T &value)

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

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

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

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

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

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

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

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

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

bool QSet::isEmpty() const

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

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

reverse_iterator QSet::rbegin()

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

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

См. также begin(), crbegin() и rend().

const_reverse_iterator QSet::rbegin() const

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

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

bool QSet::remove(const T &value)

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

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

reverse_iterator QSet::rend()

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

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

См. также end(), crend() и rbegin().

const_reverse_iterator QSet::rend() const

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

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

void QSet::reserve(int 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().

int 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 с этим множеством. Это очень быстрая операция и никогда не терпит неудачу.

QList<T> QSet::toList() const

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

Пример:

QSet<QString> set;
set << "red" << "green" << "blue" << ... << "black";

QList<QString> list = set.toList();
qSort(list);

См. также fromList() и QList::fromSet().

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

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

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

QList<T> QSet::values() const

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

Это то же самое, что и toList().

См. также fromList() и QList::fromSet().

bool 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

QDataStream &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-5.9/qset.html

Spec-Zone.ru

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