std:: flat_set
|
헤더 파일에 정의됨
<flat_set>
|
||
|
template
<
class
Key,
|
(C++23부터) | |
플랫 셋은
컨테이너 어댑터
로서,
Key
타입의 고유 객체들을 정렬된 집합으로 저장하는 연관 컨테이너의 기능을 제공합니다.
정렬은 키 비교 함수
Compare
를 사용하여 수행됩니다.
클래스 템플릿
flat_set
은
KeyContainer
타입의 객체로 전달된 기반 정렬된 컨테이너에 대한 래퍼 역할을 수행합니다.
표준 라이브러리가 Compare 요구 사항을 사용하는 모든 곳에서, 유일성은 동등 관계를 사용하여 결정됩니다. 비공식적으로 설명하면, 두 객체 a 와 b 는 어느 한쪽도 다른 쪽보다 작지 않을 경우 동등한 것으로 간주됩니다: ! comp ( a, b ) && ! comp ( b, a ) .
std::flat_set
는
Container
,
ReversibleContainer
,
선택적 컨테이너 요구사항
을 충족하며, 다음을 제외한
AssociativeContainer
의 모든 요구사항(로그 시간 검색 복잡도 포함)을 충족합니다:
- 노드와 관련된 요구 사항은 적용되지 않으며,
- 반복자 무효화 요구 사항이 다르며,
- 삽입 및 삭제 연산의 복잡도는 선형입니다.
플랫 세트는 고유 키를 사용하는 대부분의 AssociativeContainer 연산을 지원합니다.
std::flat_set
의 모든 멤버 함수는
constexpr
입니다: 상수 표현식 평가에서
std::flat_set
객체를 생성하고 사용하는 것이 가능합니다.
그러나
|
(C++26부터) |
목차 |
반복자 무효화
| 이 섹션은 불완전합니다 |
템플릿 매개변수
| Key | - |
저장된 원소의 타입.
Key
가
KeyContainer::value_type
과 동일한 타입이 아닌 경우 프로그램은 형식 오류를 가집니다.
|
| Compare | - | 엄격한 약순서를 제공하는 Compare 타입. |
| KeyContainer | - |
원소를 저장하는 기반
SequenceContainer
의 타입. 해당 컨테이너의 반복자는
LegacyRandomAccessIterator
를 만족하거나
random_access_iterator
를 모델링해야 합니다.
표준 컨테이너 std::vector 와 std::deque 는 이러한 요구사항을 충족합니다. |
멤버 타입
| 타입 | 정의 |
container_type
|
Key
Container
|
key_type
|
Key
|
value_type
|
Key
|
key_compare
|
Compare
|
value_compare
|
Compare
|
reference
|
value_type & |
const_reference
|
const value_type & |
size_type
|
typename KeyContainer :: size_type |
difference_type
|
typename KeyContainer :: difference_type |
iterator
|
구현 정의
LegacyRandomAccessIterator
,
ConstexprIterator
(C++26부터)
이며
random_access_iterator
를 만족하고
value_type
을 가리킴
|
const_iterator
|
구현 정의
LegacyRandomAccessIterator
,
ConstexprIterator
(C++26부터)
이며
random_access_iterator
를 만족하고
const
value_type
을 가리킴
|
reverse_iterator
|
std:: reverse_iterator < iterator > |
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
멤버 객체
| 멤버 | 설명 |
container_type
c
(private)
|
적응된 컨테이너
( 설명 전용 멤버 객체* ) |
key_compare
compare
(private)
|
비교 함수 객체
( 설명 전용 멤버 객체* ) |
멤버 함수
flat_set
을 생성합니다
(public member function) |
|
|
(destructor)
(implicitly declared)
|
컨테이너 어댑터의 모든 요소를 파괴합니다
(public member function) |
|
컨테이너 어댑터에 값을 할당합니다
(public member function) |
|
반복자 |
|
|
시작 부분에 대한 반복자를 반환합니다
(public member function) |
|
|
끝을 가리키는 반복자를 반환합니다
(public member function) |
|
|
역방향 반복자를 시작 부분으로 반환합니다
(public member function) |
|
|
역방향 반복자를 끝 위치로 반환합니다
(public member function) |
|
용량 |
|
|
컨테이너 어댑터가 비어 있는지 확인합니다
(public member function) |
|
|
요소의 개수를 반환합니다
(public member function) |
|
|
가능한 최대 요소 수를 반환합니다
(public member function) |
|
수정자 |
|
|
제자리에서 요소를 생성합니다
(public member function) |
|
|
힌트를 사용하여 제자리에서 요소를 생성합니다
(public member function) |
|
|
요소를 삽입합니다
(public member function) |
|
|
요소 범위를 삽입합니다
(public member function) |
|
|
내부 컨테이너를 추출합니다
(public member function) |
|
|
기본 컨테이너를 교체합니다
(public member function) |
|
|
요소들을 삭제합니다
(public member function) |
|
|
내용을 교환합니다
(public member function) |
|
|
내용을 지웁니다
(public member function) |
|
조회 |
|
|
특정 키를 가진 요소를 찾습니다
(public member function) |
|
|
특정 키와 일치하는 요소의 수를 반환합니다
(public member function) |
|
|
컨테이너가 특정 키를 가진 요소를 포함하는지 확인합니다
(public member function) |
|
|
주어진 키보다
작지 않은
첫 번째 요소에 대한 반복자를 반환합니다
(public member function) |
|
|
주어진 키보다
큰
첫 번째 요소에 대한 반복자를 반환합니다
(public member function) |
|
|
특정 키와 일치하는 요소들의 범위를 반환합니다
(public member function) |
|
관찰자 |
|
|
키를 비교하는 함수를 반환합니다
(public member function) |
|
value_type
타입의 객체에서 키를 비교하는 함수를 반환합니다
(public member function) |
|
비멤버 함수
|
(C++23)
|
두
flat_set
의 값을 사전식으로 비교
(함수 템플릿) |
|
(C++23)
|
std::swap
알고리즘을 특수화
(함수 템플릿) |
|
(C++23)
|
특정 조건을 만족하는 모든 요소를 삭제
(함수 템플릿) |
헬퍼 클래스
|
std::uses_allocator
타입 특성의 특수화
(클래스 템플릿 특수화) |
태그
|
(C++23)
|
범위의 요소들이 정렬되어 있고 고유함을 나타냄
(태그) |
추론 가이드
참고 사항
멤버 타입
iterator
와
const_iterator
는 동일한 타입의 별칭(alias)일 수 있습니다. 이는 두 타입을 매개변수 타입으로 사용하는 함수 오버로드 쌍을 정의하는 것이
One Definition Rule
을 위반할 수 있음을 의미합니다.
iterator
는
const_iterator
로 변환 가능하므로, 대신
const_iterator
를 매개변수 타입으로 갖는 단일 함수를 사용하면 됩니다.
다른 표준 container adaptors 에 비한 flat set의 장점은 다음과 같습니다:
- 잠재적으로 더 빠른 검색 (검색 연산이 로그 복잡도를 가지더라도).
- 훨씬 더 빠른 순회: random access iterators 대신 bidirectional iterators .
- 작은 객체에 대한 더 적은 메모리 사용 (그리고 큰 객체의 경우 KeyContainer :: shrink_to_fit ( ) 가 사용 가능할 때).
-
더 나은 캐시 성능 (
KeyContainer에 따라, 키들이 연속된 메모리 블록에 저장됨).
flat set의 몇 가지 단점은 다음과 같습니다:
- 비안정적인 반복자(요소 삽입 및 삭제 시 반복자가 무효화됨).
- 복사 불가 및 이동 불가 타입의 값을 저장할 수 없음.
- 약한 예외 안전성(삭제 및 삽입 시 값 이동 과정에서 복사/이동 생성자가 예외를 발생시킬 수 있음).
- 느린(즉, 선형 시간) 삽입 및 삭제 성능, 특히 이동 불가 타입에서 더욱 두드러짐.
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_flat_set
|
202207L
|
(C++23) |
std::flat_set
및
std::flat_multiset
|
__cpp_lib_constexpr_flat_set
|
202502L
|
(C++26) |
constexpr
std::flat_set
|
예제
|
이 섹션은 불완전합니다
이유: 예제 없음 |
참고 항목
|
(C++23)
|
컨테이너를 적응시켜 키로 정렬된 키들의 컬렉션을 제공
(클래스 템플릿) |
|
고유 키들의 컬렉션, 키로 정렬됨
(클래스 템플릿) |
|
|
(C++11)
|
고유 키들의 컬렉션, 키로 해시됨
(클래스 템플릿) |