Spec-Zone.ru › Qt 5.6

Класс 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(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 должен иметь тип данных значения, являющийся присваиваемым типом данных. Например, вы не можете хранить 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

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

typedef QSet::const_reference

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

typedef QSet::const_reverse_iterator

typedef QSet::const_reverse_iterator предоставляет итератор обратного поиска const в стиле 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

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

typedef QSet::key_type

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

typedef QSet::pointer

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

typedef QSet::reference

Typedef для 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

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

typedef QSet::value_type

Typedef для 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()

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

Возвращает не-const итератор в стиле 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(iterator pos)

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

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

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

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

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 в множество, если 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/archives/qt-5.6/qset.html

Spec-Zone.ru

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