QSet Class

template <typename T> class QSet

QSet クラスは、ハッシュ・テーブル・ベースの集合を提供するテンプレート・クラスです。詳細...

ヘッダー #include <QSet>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:このクラスの関数はすべてリエントラントです。

パブリック型

パブリック関数

QSet()
QSet(std::initializer_list<T> list)
QSet(InputIterator first, InputIterator last)
QSet<T>::const_iterator begin() const
QSet<T>::iterator begin()
qsizetype capacity() const
QSet<T>::const_iterator cbegin() const
QSet<T>::const_iterator cend() const
void clear()
QSet<T>::const_iterator constBegin() const
QSet<T>::const_iterator constEnd() const
QSet<T>::const_iterator constFind(const T &value) const
bool contains(const QSet<T> &other) const
bool contains(const T &value) const
qsizetype count() const
bool empty() const
QSet<T>::const_iterator end() const
QSet<T>::iterator end()
QSet<T>::iterator erase(QSet<T>::const_iterator pos)
QSet<T>::const_iterator find(const T &value) const
QSet<T>::iterator find(const T &value)
QSet<T>::iterator insert(const T &value)
(since 6.1) QSet<T>::iterator insert(QSet<T>::const_iterator it, 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)
(since 6.1) qsizetype removeIf(Pred pred)
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
bool 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)
QSet<T> &operator+=(const T &value)
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)
QSet<T> &operator|=(const T &value)
(since 6.1) qsizetype erase_if(QSet<T> &set, Predicate pred)
QSet<T> operator&(QSet<T> &&lhs, const QSet<T> &rhs)
QSet<T> operator&(const QSet<T> &lhs, const QSet<T> &rhs)
QSet<T> operator+(QSet<T> &&lhs, const QSet<T> &rhs)
QSet<T> operator+(const QSet<T> &lhs, const QSet<T> &rhs)
QSet<T> operator-(QSet<T> &&lhs, const QSet<T> &rhs)
QSet<T> operator-(const QSet<T> &lhs, const QSet<T> &rhs)
QDataStream &operator<<(QDataStream &out, const QSet<T> &set)
QDataStream &operator>>(QDataStream &in, QSet<T> &set)
QSet<T> operator|(QSet<T> &&lhs, const QSet<T> &rhs)
QSet<T> operator|(const QSet<T> &lhs, const QSet<T> &rhs)

詳細説明

QSet<T>はQtの汎用コンテナクラスの1つです。不特定の順序で値を保存し、非常に高速な値の検索を提供します。内部的には、QSet<T> はQHash として実装されています。

以下は、QString の値を持つ QSet の例です:

セットに値を挿入するには、insert() を使用します:

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

セットに項目を挿入するもうひとつの方法は、operator<< ()を使うことである:

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

アイテムがセットに属するかどうかをテストするには、contains ()を使用します:

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

QSet に格納されているすべての値をナビゲートしたい場合は、イテレータを使用できます。QSet は、Java スタイルのイテレータ(QSetIteratorQMutableSetIterator) とSTL スタイルのイテレータ(QSet::iteratorQSet::const_iterator) の両方をサポートしています。以下は、Javaスタイルのイテレータを使用してQSet<QWidget *>を反復処理する方法です:

QSetIterator<QWidget*>i(set);while(i.hasNext()) {*w= i.next()    QWidget*w =i.next();    qDebug() << w;
}

以下は同じコードだが、STLスタイルのイテレーターを使っている:

for(autoi=set.cbegin(),end=set.cend(); i!=end;++i)    qDebug() << *i;

QSetは順序付けされていないため、イテレータのシーケンスが予測可能であると仮定することはできません。キーによる順序付けが必要な場合は、QMap を使用してください。

QSet内を移動するには、範囲ベースのforを使用することもできます:

QSet<QString>set;...for(const auto &value: set)    qDebug() << value;

アイテムをセットから削除するには、remove ()を使用する。また、すべての項目を削除するclear() 関数もあります。

QSetの値のデータ型は、割り当て可能なデータ型でなければなりません。例えば、QWidget を値として格納することはできません。代わりに、QWidget * を格納します。さらに、この型はoperator==() を提供し、キーの型の引数に対してハッシュ値を返すグローバルなqHash() 関数も必要です。qHash() がサポートする型の一覧については、QHash のドキュメントを参照してください。

内部的には、QSet はハッシュ・テーブルを使用して検索を実行します。ハッシュ・テーブルは自動的に大きくなったり小さくなったりして、メモリを浪費することなく高速な検索を行います。QSet に含まれる要素の数がおおよそわかっている場合は、reserve() を呼び出すことで、ハッシュ・テーブルのサイズを制御することができます。また、capacity() を呼び出して、ハッシュ・テーブルのサイズを取得することもできる。

QSetIteratorQMutableSetIteratorQHashQMapも参照のこと

メンバ型ドキュメント

QSet::ConstIterator

Qt-style synonym forQSet::const_iterator.

QSet::Iterator

Qt-style synonym forQSet::iterator.

QSet::const_pointer

const T * の型定義。STL との互換性のために提供される。

QSet::const_reference

const T & の型定義。STL との互換性のために提供される。

QSet::difference_type

const ptrdiff_tの型定義。STL との互換性のために提供されています。

QSet::key_type

STL との互換性のために提供される。

QSet::pointer

T * の型定義。STL との互換性のために提供される。

QSet::reference

T & の型定義。STL との互換性のために提供される。

QSet::size_type

int の型定義。STL との互換性のために提供される。

QSet::value_type

STL との互換性のために提供される。

メンバ関数ドキュメント

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

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

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

新しいアイテムvalue を挿入し、セットへの参照を返す。value がすでにセット内に存在する場合、セットは変更されません。

insert()も参照してください

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

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

以下同じ unite(other).

operator|()、operator&=()、operator-=()も参照のこと

[noexcept] QSet::QSet()

空集合を構築します。

clear()も参照してください

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

イニシャライザーリストlist の各要素のコピーでセットを構築する。

template <typename InputIterator, QtPrivate::IfIsInputIterator<InputIterator> = true> QSet::QSet(InputIterator first, InputIterator last)

イテレータ範囲 [first,last] 内の内容を持つセットを構築する。

InputIterator の値型はT に変換可能でなければなりません。

注意: 範囲 [first,last] に重複要素がある場合、最初の要素が保持されます。

[noexcept] QSet<T>::const_iterator QSet::begin() const

セットの最初のアイテムに位置する constSTL 形式のイテレータを返します。

constBegin() およびend()も参照してください

QSet<T>::iterator QSet::begin()

これはオーバーロードされた関数です。

セットの最初のアイテムに位置する、非 constSTL 形式のイテレータを返します。

qsizetype QSet::capacity() const

セットの内部ハッシュテーブルのバケット数を返す。

この関数の唯一の目的は、QSet のメモリ使用量を微調整する手段を提供することです。一般に、この関数を呼び出す必要はほとんどないでしょう。セット内の項目数を知りたい場合は、size() を呼び出す。

reserve() およびsqueeze()も参照

[noexcept] QSet<T>::const_iterator QSet::cbegin() const

セットの最初のアイテムに位置する constSTL 形式のイテレータを返します。

begin() およびcend()も参照してください

[noexcept] QSet<T>::const_iterator QSet::cend() const

集合の最後の項目の後の虚数項目を指す、STL 形式のイテレータを返します。

cbegin() およびend()も参照してください

void QSet::clear()

セットからすべての要素を削除します。

remove()も参照してください

[noexcept] QSet<T>::const_iterator QSet::constBegin() const

セットの最初のアイテムに位置する constSTL 形式のイテレータを返します。

begin() およびconstEnd()も参照してください

[noexcept] QSet<T>::const_iterator QSet::constEnd() const

集合の最後の項目の後の虚数項目を指す、STL 形式のイテレータを返します。

constBegin() およびend()も参照してください

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

セット内の項目value に位置する定数イテレータを返す。セットに項目value が含まれていない場合、この関数はconstEnd() を返します。

find() およびcontains()も参照してください

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

セットにother セットのすべての項目が含まれている場合はtrue を返し、そうでない場合はfalse を返す。

insert()、remove()、find()も参照

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

セットに項目value が含まれていればtrue を返し、含まれていなければ false を返す。

insert()、remove() およびfind()も参照

qsizetype QSet::count() const

size() と同じ。

bool QSet::empty() const

セットが空の場合、true を返します。この関数は STL との互換性のために提供されています。これはisEmpty() と同等です。

[noexcept] QSet<T>::const_iterator QSet::end() const

集合の最後のアイテムの後の架空のアイテムに位置する constSTL 形式のイテレータを返します。

constEnd() およびbegin()も参照してください

QSet<T>::iterator QSet::end()

これはオーバーロードされた関数です。

セットの最後のアイテムの後の架空のアイテムを指す、非 constSTL 形式のイテレータを返します。

QSet<T>::iterator QSet::erase(QSet<T>::const_iterator pos)

イテレータ位置pos にある項目をセットから削除し、セットの次の項目に位置するイテレータを返す。

remove() とは異なり、この関数は、QSet の内部データ構造を決してリハッシュさせません。これは、反復処理中に安全に呼び出すことができ、セット内の項目の順序に影響を与えないことを意味する。

注意: イテレータpos は有効で再参照可能でなければなりません。それ自身のend() を含め、それ以外のイテレータでこのメソッドを呼び出すと、未定義の動作になります。特に、空集合のbegin() イテレータでさえ、再参照できません。

remove() およびfind()も参照してください

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

セット内の項目value に位置する定数イテレータを返す。セットに項目value が含まれていない場合、この関数はconstEnd() を返します。

constFind() およびcontains()も参照してください

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

これはオーバーロードされた関数です。

セット内の項目value に位置する非定数のイテレータを返します。セットに項目value が含まれていない場合、この関数はend() を返します。

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

value がまだセット内にない場合、項目value をセットに挿入し、挿入された項目を指すイテレータを返します。

operator<<()、remove()、contains()も参照

[since 6.1] QSet<T>::iterator QSet::insert(QSet<T>::const_iterator it, const T &value)

これはオーバーロードされた関数である。

value がまだセット内にない場合、アイテムvalue をセットに挿入し、挿入されたアイテムを指すイテレータを返します。

イテレータit は無視されます。

この関数は STL との互換性のために提供されています。

この関数は Qt 6.1 で導入されました。

operator<<(),remove(),contains()も参照してください

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

このセットから、other セットに含まれないすべての項目を削除します。このセットへの参照が返されます。

intersects()、operator&=()、unite() およびsubtract()も参照

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

このセットがother と少なくとも1つの共通項目を持つ場合、true を返す。

contains() およびintersect()も参照

bool QSet::isEmpty() const

集合に要素がない場合はtrue を返し、そうでない場合は false を返す。

size()も参照してください

bool QSet::remove(const T &value)

項目value の出現回数をすべてセットから削除する。項目が実際に削除された場合は true を返し、そうでない場合はfalse を返します。

contains() およびinsert()も参照して ください。

[since 6.1] template <typename Pred> qsizetype QSet::removeIf(Pred pred)

この集合から、述語predtrue を返すすべての要素を削除します。もしあれば、削除された要素の数を返します。

この関数は Qt 6.1 で導入されました。

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()も参照してください

[noexcept] 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() までを繰り返し実行することで、時間とメモリの使用を避けることができます。

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

other セットがこのセットと等しくない場合はtrue を返し、そうでない場合はfalse を返す。

2つの集合が同じ要素を含む場合は等しいとみなされる。

この関数は、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)

以下同じ subtract(other).

operator-()、operator|=()、operator&=()も参照のこと

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

項目value が見つかった場合、それをセットから削除し、セットへの参照を返します。value がセットに含まれていない場合は、何も削除されません。

remove()も参照してください

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

other セットがこのセットと等しい場合はtrue を返し、そうでない場合はfalse を返す。

2つの集合が同じ要素を含む場合、等しいとみなされる。

この関数は、operator==() を実装する値型を必要とします。

operator!=()も参照してください

関連する非会員

QSet<T> operator+(QSet<T> &&lhs, const QSet<T> &rhs)

QSet<T> operator+(const QSet<T> &lhs, const QSet<T> &rhs)

QSet<T> operator|(QSet<T> &&lhs, const QSet<T> &rhs)

QSet<T> operator|(const QSet<T> &lhs, const QSet<T> &rhs)

セットlhsrhs の和である新しいQSet を返します。

unite(),operator|=(),operator&(),operator-()も参照

QSet<T> operator&(QSet<T> &&lhs, const QSet<T> &rhs)

QSet<T> operator&(const QSet<T> &lhs, const QSet<T> &rhs)

セットlhsrhs の交点である新しいQSet を返します。

intersect(),operator&=(),operator|(),operator-()も参照

QSet<T> operator-(QSet<T> &&lhs, const QSet<T> &rhs)

QSet<T> operator-(const QSet<T> &lhs, const QSet<T> &rhs)

セットlhsrhs の差分である新しいQSet を返します。

subtract(),operator-=(),operator|(),operator&()も参照

[since 6.1] template <typename T, typename Predicate> qsizetype erase_if(QSet<T> &set, Predicate pred)

集合set から、述語pred が真を返すすべての要素を削除します。削除された要素があれば、その数を返します。

この関数は Qt 6.1 で導入されました。

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

set をストリームout に書き込む。

この関数は、operator<<() を実装する値型を必要とします。

QDataStream 演算子のフォーマットも参照してください

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

ストリームin からセットをset に読み込む。

この関数は、operator>>() を実装する値型を必要とします。

QDataStream 演算子のフォーマットも参照してください

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.