QSet Class

template <typename T> class QSet

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

Header: #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");

セットへ項目を挿入するもう1つの方法は、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()) {
    QWidget *w = i.next();
    qDebug() << w;
}

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

for (auto i = 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

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

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

集合の最後の項目の後にある架空の項目を指す constSTL 形式のイテレータを返します。

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

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() イテレータでさえ、再参照できません。

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

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 を返します。

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 演算子の書式」も参照して ください。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。