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