Класс 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.
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(iterator pos)
Удаляет элемент по позиции итератора pos из множества и возвращает итератор, размещённый на следующем элементе множества.
В отличие от remove(), эта функция никогда не приводит к перехешированию внутренней структуры данных QSet. Это означает, что её можно безопасно вызывать во время итерации, и она не повлияет на порядок элементов в множестве.
Эта функция была добавлена в 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 в множество, если 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