QSet Class
template <typename T> class QSetQSet クラスは、ハッシュテーブルに基づくセットを提供するテンプレートクラスです。詳細...
| ヘッダー: | #include <QSet> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- 継承されたメンバーを含む、すべてのメンバーの一覧
- QSetは、「暗黙的に共有されるクラス」および「コンテナクラス」の一部です。
注:このクラスのすべての関数は再入可能である。
QSet の比較
| カテゴリ | 比較可能な型 |
|---|---|
| 等価性 | QSet |
公開型
| class | const_iterator |
| class | iterator |
| ConstIterator | |
| Iterator | |
| const_pointer | |
| const_reference | |
| difference_type | |
| key_type | |
| pointer | |
| reference | |
| size_type | |
| value_type |
パブリック関数
| 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(T &&value) |
(since 6.12) QSet<T>::iterator | insert(QSet<T>::const_iterator it, 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(QSet<T> &&other) |
| QSet<T> & | unite(const QSet<T> &other) |
| QList<T> | values() const & |
(since 6.12) QList<T> | values() && |
| QSet<T> & | operator&=(const QSet<T> &other) |
| QSet<T> & | operator&=(const T &value) |
| QSet<T> & | operator+=(QSet<T> &&other) |
| 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) |
| QSet<T> & | operator|=(QSet<T> &&other) |
| QSet<T> & | operator|=(const QSet<T> &other) |
| QSet<T> & | operator|=(const T &value) |
関連する非メンバー変数
(since 6.1) qsizetype | erase_if(QSet<T> &set, Predicate pred) |
| bool | 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, QSet<T> &&rhs) |
| QSet<T> | operator+(QSet<T> &&lhs, const QSet<T> &rhs) |
| QSet<T> | operator+(const QSet<T> &lhs, 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) |
| bool | operator==(const QSet<T> &lhs, const QSet<T> &rhs) |
| QDataStream & | operator>>(QDataStream &in, QSet<T> &set) |
| QSet<T> | operator|(QSet<T> &&lhs, QSet<T> &&rhs) |
| QSet<T> | operator|(QSet<T> &&lhs, const QSet<T> &rhs) |
| QSet<T> | operator|(const QSet<T> &lhs, QSet<T> &&rhs) |
| QSet<T> | operator|(const QSet<T> &lhs, const QSet<T> &rhs) |
詳細説明
QSet<T> は Qtのジェネリックコンテナクラスの一つであり、T はセットに格納される値の型を指定します。値は順不同で格納され、非常に高速な値の検索が可能です。内部的には、QSet<T> はQHash として実装されています。
以下に、QString の値を持つQSetの例を示します:
セットに値を挿入するには、insert() を使用します:
set.insert("one");
set.insert("three");
set.insert("seven");セットに要素を追加するもう1つの方法は、operator<<() を使用することです:
set << "twelve" << "fifteen" << "nineteen";要素がセットに含まれているかどうかを判定するには、contains() を使用します:
if (!set.contains("ninety-nine"))
{/*...*/}QSetに格納されているすべての値を順に処理したい場合は、イテレータを使用できます。QSetは、Javaスタイルのイテレータ(QSetIterator およびQMutableSetIterator )とSTLスタイルのイテレータ(QSet::iterator およびQSet::const_iterator )の両方をサポートしています。Javaスタイルのイテレータを使用してQSet<QWidget *>を反復処理する方法は次のとおりです:
QSetIterator<QWidget*>i(set);
while(i.hasNext()) {
QWidget*w =i.next();
qDebug() << w;
}以下は、STLスタイルのイテレータを使用した、同じコードです:
for(autoi=set.cbegin(),end=set.cend(); i!=end;++i)
qDebug() << *i;QSetは順序を持たないため、イテレータのシーケンスが予測可能であると仮定することはできません。キーによる順序付けが必要な場合は、QMap を使用してください。
QSetを順に処理するには、範囲指定のfor文を使用することもできます:
remove() を使用すると、セットから項目を削除できます。また、clear() 関数を使用すると、すべての項目を削除できます。
QSetの値のデータ型は、代入可能なデータ型でなければなりません。たとえば、QWidget を値として格納することはできません。その代わりに、QWidget *を格納します。さらに、その型はoperator==() を提供している必要があり、また、キーの型を持つ引数に対してハッシュ値を返すグローバル関数qHash()が存在する必要があります。qHash() がサポートする型のリストについては、『QHash 』のドキュメントを参照してください。
内部的には、QSet はハッシュテーブルを使用して検索を行います。 ハッシュテーブルは、メモリを無駄にすることなく高速な検索を行うために、自動的に拡大・縮小されます。QSet が含む要素のおおよその数がすでにわかっている場合は、reserve() を呼び出すことでハッシュテーブルのサイズを制御することもできますが、良好なパフォーマンスを得るためにこれは必須ではありません。また、capacity() を呼び出すことで、ハッシュテーブルのサイズを取得することもできます。
関連項目: QSetIterator 、QMutableSetIterator 、QHash 、およびQMap 。
メンバ型のドキュメント
QSet::ConstIterator
QSet::const_iterator の Qt スタイルの同義語。
QSet::Iterator
QSet::iterator の Qt スタイルの同義語。
QSet::const_pointer
const T * の typedef。STL との互換性を確保するために用意されています。
QSet::const_reference
const T & の typedef。STL との互換性を確保するために用意されています。
QSet::difference_type
const ptrdiff_t の typedef。STL との互換性を確保するために用意されています。
QSet::key_type
T の typedef。STL との互換性を確保するために用意されています。
QSet::pointer
T * の typedef。STL との互換性を確保するために用意されています。
QSet::reference
T および & に対する typedef。STL との互換性を確保するために用意されています。
QSet::size_type
int の typedef。STL との互換性を確保するために用意されています。
QSet::value_type
T の typedef。STL との互換性を確保するために用意されています。
メンバ関数のドキュメント
[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
セットの最初の要素の位置にある、STL スタイルのconstイテレータを返します。
constBegin() およびend()も参照してください 。
QSet<T>::iterator QSet::begin()
セットの最初の要素の位置にある、非constのSTLスタイルのイテレータを返します。
これはオーバーロードされた関数です。
qsizetype QSet::capacity() const
セットの内部ハッシュテーブルに含まれるバケットの数を返します。
この関数の唯一の目的は、QSet のメモリ使用量を微調整する手段を提供することです。通常、この関数を呼び出す必要はほとんどありません。セットに含まれる項目の数を知りたい場合は、size()を呼び出してください。
reserve() およびsqueeze()も参照してください 。
[noexcept] QSet<T>::const_iterator QSet::cbegin() const
セットの最初の要素の位置にある、STL スタイルのconstイテレータを返します。
[noexcept] QSet<T>::const_iterator QSet::cend() const
セットの最後の要素の直後に位置する仮想の要素を指す、STL スタイルのconstイテレータを返します。
void QSet::clear()
セットからすべての要素を削除します。
remove()も参照してください 。
[noexcept] QSet<T>::const_iterator QSet::constBegin() const
セットの最初の要素の位置にある、STL スタイルのconstイテレータを返します。
begin() およびconstEnd()も参照してください 。
[noexcept] QSet<T>::const_iterator QSet::constEnd() const
セットの最後の要素の直後に位置する仮想の要素を指す、STL スタイルのconstイテレータを返します。
constBegin() およびend()も参照してください 。
QSet<T>::const_iterator QSet::constFind(const T &value) const
セット内の要素value に位置する const イテレータを返します。セットに要素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
セットの最後の要素の直後に位置する仮想の要素を指す、STLスタイルのconstイテレータを返します。
constEnd() およびbegin()も参照してください 。
QSet<T>::iterator QSet::end()
セットの最後の要素の直後に位置する架空の要素を指す、非constのSTLスタイルのイテレータを返します。
これはオーバーロードされた関数です。
QSet<T>::iterator QSet::erase(QSet<T>::const_iterator pos)
イテレータの位置にある要素pos をセットから削除し、セット内の次の要素の位置にあるイテレータを返します。
remove() とは異なり、この関数はQSet の内部データ構造の再ハッシュを一切引き起こしません。つまり、反復処理中に安全に呼び出すことができ、セット内の項目の順序に影響を与えません。
注:イテレータ ` pos ` は 有効であり、参照可能でなければなりません。これ以外のイテレータ(自身の `end()` を含む)に対してこのメソッドを呼び出すと、未定義の挙動となります。特に、空のセットの `begin()` イテレータでさえ、参照することはできません。
QSet<T>::const_iterator QSet::find(const T &value) const
セット内の項目value に位置する const イテレータを返します。セットに項目value が含まれていない場合、この関数はconstEnd() を返します。
constFind() およびcontains()も参照してください 。
QSet<T>::iterator QSet::find(const T &value)
セット内の要素value の位置に配置された非constイテレータを返します。セットに要素value が含まれていない場合、この関数はend()を返します。
これはオーバーロードされた関数です。
QSet<T>::iterator QSet::insert(const T &value)
value がまだセットに含まれていない場合、アイテムvalue をセットに挿入し、挿入されたアイテムを指すイテレータを返します。
operator<<()、remove()、およびcontains()も参照してください 。
[since 6.1] QSet<T>::iterator QSet::insert(T &&value)
これはオーバーロードされた関数です。
この関数は Qt 6.1 で導入されました。
[since 6.12] QSet<T>::iterator QSet::insert(QSet<T>::const_iterator it, T &&value)
これはオーバーロードされた関数です。
この関数は Qt 6.12 で導入されました。
[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)
この集合から、述語 `pred ` が `true` を返すすべての要素を削除します。削除された要素がある場合は、その数を返します。
この関数は Qt 6.1 で導入されました。
void QSet::reserve(qsizetype size)
セットの内部ハッシュテーブルが、少なくともsize 個のバケットで構成されるようにします。
この関数は、巨大なセットを構築する必要があり、再割り当ての繰り返しを避けたい場合に役立ちます。例えば:
理想的には、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 と入れ替えます。この操作は非常に高速で、失敗することはありません。
other セットに含まれておらず、かつこのセットにもまだ含まれていない各項目が、このセットに挿入されます。このセットへの参照が返されます。
operator|=()、intersect()、およびsubtract()も参照してください 。
QList<T> QSet::values() const &
セット内の要素を含む新しいQList を返します。QList 内の要素の順序は未定義です。
注: Qt 5.14以降 、Qtのジェネリックコンテナクラスでは範囲コンストラクタが利用可能となっており、このメソッドの代わりにそれらを使用すべきです。
この関数は、線形時間で新しいリストを作成します。これに伴う時間とメモリの使用は、constBegin() からconstEnd() への反復処理を行うことで回避できます。
[since 6.12] QList<T> QSet::values() &&
これはオーバーロードされた関数です。
この関数は Qt 6.12 で導入されました。
QSet<T> &QSet::operator&=(const QSet<T> &other)
「同じ」として intersect(other)。
operator&()、operator|=()、およびoperator-=()も参照してください 。
QSet<T> &QSet::operator&=(const T &value)
次と同じです intersect(other)、他の要素を、単元集合value を含む集合とみなす場合。
これはオーバーロードされた関数です。
QSet<T> &QSet::operator+=(QSet<T> &&other)
QSet<T> &QSet::operator|=(QSet<T> &&other)
QSet<T> &QSet::operator+=(const QSet<T> &other)
QSet<T> &QSet::operator|=(const QSet<T> &other)
「同じ」 unite(other)。
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)
QSet<T> &QSet::operator+=(const T &value)
QSet<T> &QSet::operator|=(const T &value)
新しい項目 `value ` をセットに追加し、セットへの参照を返します。もし `value ` がすでにセット内に存在する場合、セットは変更されません。
insert()も参照してください 。
関連する非メンバー
[since 6.1] template <typename T, typename Predicate> qsizetype erase_if(QSet<T> &set, Predicate pred)
述語 `pred ` が真を返すすべての要素を、集合 `set` から削除します。削除された要素がある場合は、その数を返します。
この関数は Qt 6.1 で導入されました。
[noexcept] bool operator!=(const QSet<T> &lhs, const QSet<T> &rhs)
lhs セットがrhs セットと等しくない場合は、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)
集合lhs とrhs の共通部分である新しいQSet を返します。
intersect()、operator&=()、operator|()、およびoperator-()も参照してください 。
QSet<T> operator+(QSet<T> &&lhs, QSet<T> &&rhs)
QSet<T> operator|(QSet<T> &&lhs, QSet<T> &&rhs)
QSet<T> operator+(QSet<T> &&lhs, const QSet<T> &rhs)
QSet<T> operator|(QSet<T> &&lhs, const QSet<T> &rhs)
QSet<T> operator+(const QSet<T> &lhs, QSet<T> &&rhs)
QSet<T> operator|(const QSet<T> &lhs, QSet<T> &&rhs)
QSet<T> operator+(const QSet<T> &lhs, const QSet<T> &rhs)
QSet<T> operator|(const QSet<T> &lhs, const QSet<T> &rhs)
lhs とrhs の集合の和集合である新しい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)
セットlhs とrhs の差集合である新しいQSet を返します。
subtract()、operator-=()、operator|()、およびoperator&()も参照してください 。
template <typename T> QDataStream &operator<<(QDataStream &out, const QSet<T> &set)
set をout ストリームに書き込みます。
この関数を使用するには、値型がoperator<<() を実装している必要があります。
QDataStream 演算子の形式も参照してください 。
[noexcept] bool operator==(const QSet<T> &lhs, const QSet<T> &rhs)
lhs セットがrhs セットと等しい場合は `true ` を返し、そうでない場合は `false` を返します。
2つの集合は、同じ要素を含む場合に等しいとみなされます。
この関数を使用するには、値型が `operator==()` を実装している必要があります。
operator!=()も参照してください 。
template <typename T> QDataStream &operator>>(QDataStream &in, QSet<T> &set)
ストリーム `in ` からセットを読み取り、`set` に格納します。
この関数を使用するには、値型がoperator>>() を実装している必要があります。
QDataStream 演算子の形式も参照してください 。
© 2026 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.