QSet Class
template <typename T> class QSetQSet クラスは、ハッシュ・テーブル・ベースの集合を提供するテンプレート・クラスです。詳細...
Header: | #include <QSet> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- 継承メンバを含む全メンバのリスト
- 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(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");
セットへ項目を挿入するもう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 (auto i = 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-styleシノニム。
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()も参照してください 。
と同じ。 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() を呼び出します。
[noexcept]
QSet<T>::const_iterator QSet::cbegin() const
セットの最初のアイテムに位置する constSTL 形式のイテレータを返します。
[noexcept]
QSet<T>::const_iterator QSet::cend() const
集合の最後の項目の後にある架空の項目を指す constSTL 形式のイテレータを返します。
void QSet::clear()
集合からすべての要素を削除します。
remove()も参照して ください。
[noexcept]
QSet<T>::const_iterator QSet::constBegin() const
集合の最初の項目を指すSTL 形式のイテレータを返します。
begin() およびconstEnd()も参照して ください。
[noexcept]
QSet<T>::const_iterator QSet::constEnd() const
集合の最後の項目の後にある仮想の項目を指す constSTL 形式のイテレータを返します。
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
この関数は、集合の最後の項目の後の架空の項目に位置する 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() イテレータでさえ、再参照できません。
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 に位置する非定数イテレータを返します。セットに項目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
を返します。
[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内部ハッシュ・テーブルが自動的に縮小したり拡大したりするため、メモリをあまり浪費することなく良好なパフォーマンスが得られる。
qsizetype QSet::size() const
セット内の項目の数を返します。
isEmpty() およびcount() も参照 ください。
void QSet::squeeze()
セットの内部ハッシュ・テーブルのサイズを縮小してメモリを節約します。
この関数の唯一の目的は、QSet のメモリ使用量を微調整することです。通常、この関数を呼び出す必要はほとんどありません。
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)
セット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 を返します。
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)
集合lhs とrhs の差集合である新しい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 演算子の書式」も参照して ください。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。