이 페이지에서

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

공개 유형

공개 함수

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");

집합에 요소를 삽입하는 또 다른 방법은 ` 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 문도 사용할 수 있습니다:

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

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

세트의 첫 번째 항목에 위치하는 const STL 스타일의 반복자를 반환합니다.

constBegin() 및 end()도 참조하십시오 .

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

집합의 첫 번째 항목에 위치하는 비상수(non-const) STL 스타일의 반복자를 반환합니다.

이 함수는 오버로드된 함수입니다.

qsizetype QSet::capacity() const

세트의 내부 해시 테이블에 포함된 버킷의 개수를 반환합니다.

이 함수의 유일한 목적은 QSet 의 메모리 사용량을 미세 조정할 수 있는 수단을 제공하는 것입니다. 일반적으로 이 함수를 호출할 일은 거의 없을 것입니다. 세트에 포함된 항목의 개수를 알고 싶다면 size()를 호출하십시오.

reserve() 및 squeeze()도 참조하십시오 .

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

세트의 첫 번째 항목에 위치하는 const STL 스타일 이터레이터를 반환합니다.

begin() 및 cend()도 참조하십시오 .

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

집합의 마지막 항목 다음에 있는 가상의 항목을 가리키는 STL 스타일의 const 이터레이터를 반환합니다.

cbegin() 및 end()도 참조하십시오 .

void QSet::clear()

집합에서 모든 원소를 제거합니다.

remove()도 참조하십시오 .

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

세트의 첫 번째 항목에 위치한 const STL 스타일 이터레이터를 반환합니다.

begin() 및 constEnd()도 참조하십시오 .

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

집합의 마지막 항목 다음에 있는 가상의 항목을 가리키는 const STL 스타일의 이터레이터를 반환합니다.

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

집합의 마지막 항목 다음에 있는 가상의 항목에 위치하는 const STL 스타일 이터레이터를 반환합니다.

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() 이터레이터조차도 참조할 수 없습니다.

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 에 위치하는 비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 와 적어도 하나의 원소를 공유하는 경우 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 개의 버킷으로 구성되도록 보장합니다.

이 함수는 거대한 세트를 구축해야 하며 반복적인 재할당을 피하고자 하는 코드에 유용합니다. 예를 들어:

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(QSet<T> &&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()으로 반복 처리를 수행하면 이에 수반되는 시간 및 메모리 사용량을 피할 수 있습니다.

[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), '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 를 반환합니다.

두 집합은 동일한 원소를 포함하는 경우 서로 같다고 간주됩니다.

이 함수를 사용하려면 값 유형이 ` 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`를 반환합니다.

두 집합은 동일한 원소를 포함할 때 서로 같다고 간주됩니다.

이 함수를 사용하려면 값 유형이 ` 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.