std::flat_set<Key,Compare,KeyContainer>:: insert
From cppreference.net
|
std::
pair
<
iterator,
bool
>
insert
(
const
value_type
&
value
)
;
|
(1) | (C++23 이후) |
|
std::
pair
<
iterator,
bool
>
insert
(
value_type
&&
value
)
;
|
(2) | (C++23 이후) |
|
iterator insert
(
const_iterator pos,
const
value_type
&
value
)
;
|
(3) | (C++23 이후) |
|
iterator insert
(
const_iterator pos, value_type
&&
value
)
;
|
(4) | (C++23 이후) |
|
template
<
class
K
>
iterator insert ( const_iterator pos, K && x ) ; |
(5) | (C++23 이후) |
|
template
<
class
InputIt
>
void insert ( InputIt first, InputIt last ) ; |
(6) | (C++23 이후) |
|
template
<
class
K
>
std:: pair < iterator, bool > insert ( K && x ) ; |
(7) | (C++23 이후) |
|
template
<
class
InputIt
>
void insert ( std:: sorted_unique_t , InputIt first, InputIt last ) ; |
(8) | (C++23 이후) |
|
void
insert
(
std::
initializer_list
<
key_type
>
ilist
)
;
|
(9) | (C++23 이후) |
|
void
insert
(
std::
sorted_unique_t
s,
std::
initializer_list
<
key_type
>
ilist
)
;
|
(10) | (C++23 이후) |
컨테이너에 동등한 키를 가진 요소가 아직 없는 경우 요소를 삽입합니다.
1)
value
를 삽입합니다.
return
emplace
(
value
)
;
와 동일합니다.
2)
value
를 삽입합니다.
return
emplace
(
std
::
move
(
value
)
)
;
와 동등합니다.
3)
pos
바로 앞 위치에 최대한 가깝게
value
를 삽입합니다.
return
emplace_hint
(
pos, value
)
;
와 동일합니다.
4)
pos
바로 앞 위치에 최대한 가깝게
value
를 삽입합니다.
return
emplace_hint
(
pos, std
::
move
(
value
)
)
;
와 동일합니다.
5,7)
만약
*
this
가 이미
x
와 투명하게 비교하여 동등한 요소를 포함하고 있다면, 아무 작업도 수행하지 않습니다. 그렇지 않으면, 다음과 같이 새 요소를 삽입합니다:
- (5) emplace ( pos, std:: forward < K > ( x ) ) ( pos 바로 앞 위치에 최대한 가깝게);
- (7) emplace ( std:: forward < K > ( x ) ) .
x
에서
key_type
로의 변환은 객체
u
를 생성해야 하며, 이에 대해
find
(
k
)
==
find
(
u
)
가
true
여야 합니다. 그렇지 않으면 동작은 정의되지 않습니다.
다음 오버로드들은 다음 조건을 만족할 때만 오버로드 해결에 참여합니다:
-
한정자 ID
Compare::is_transparent가 유효하고 타입을 나타내는 경우, 그리고 - std:: is_constructible_v < value_type, K > 가 true 인 경우,
Key
인스턴스를 생성하지 않고도 이 함수를 호출할 수 있습니다.
6)
다음 연산 시퀀스와 동등합니다:
-
다음 범위에서 요소들을 삽입합니다:
[first,last)마치 다음과 같이: c. insert ( c. end ( ) , first, last ) ; . -
새로 삽입된 요소들의 범위를
compare를 기준으로 정렬합니다. - 결과적으로 정렬된 범위와 기존 요소들의 정렬된 범위를 단일 정렬된 범위로 병합합니다. (참고: 병합 작업은 메모리를 할당할 수 있습니다).
- 연속적으로 동등한 요소 그룹에서 첫 번째 요소를 제외한 모든 요소를 삭제합니다.
범위 내에 비교 동등한 키를 가진 여러 요소가 있는 경우, 어떤 요소가 삽입될지 지정되지 않습니다 (보류 중인
LWG2844
).
8)
범위의 요소들을 삽입합니다
[
first
,
last
)
. 다음 코드와 동일합니다
insert
(
first, last
)
;
.
범위 내에서 비교 시 동등한 키를 가진 여러 요소가 있는 경우, 어떤 요소가 삽입될지 명시되지 않습니다 (보류 중인
LWG2844
).
9)
초기화자 목록
ilist
에서 요소들을 삽입합니다.
insert
(
ilist.
begin
(
)
, ilist.
end
(
)
)
;
와 동등합니다.
범위 내에서 비교 시 동등한 키를 가진 여러 요소가 있는 경우, 어떤 요소가 삽입될지 명시되지 않습니다 (보류 중인
LWG2844
).
10)
이니셜라이저 리스트
ilist
에서 요소들을 삽입합니다.
insert
(
s, ilist.
begin
(
)
, ilist.
end
(
)
)
;
와 동등합니다.
범위 내에서 비교 시 동등한 키를 가진 여러 요소가 있는 경우, 어떤 요소가 삽입될지 명시되지 않습니다 (보류 중인
LWG2844
).
| 반복자 무효화에 대한 정보는 여기 에서 복사되었습니다 |
목차 |
매개변수
| pos | - | 새 요소가 삽입될 위치 앞을 가리키는 반복자 |
| value | - | 삽입할 요소 값 |
| first, last | - | 삽입할 요소들의 소스 범위 를 정의하는 한 쌍의 반복자 |
| ilist | - | 값들을 삽입할 초기화자 리스트 |
| x | - | 키와 투명하게 비교될 수 있는 임의의 타입의 값 |
| s | - |
입력 시퀀스가 정렬되어 있고(
compare
기준) 고유한 요소들만 포함함을 나타내는
구분 태그
|
| 타입 요구사항 | ||
-
InputIt
는
LegacyInputIterator
요구사항을 충족해야 합니다.
|
||
반환값
1,2)
삽입된 요소(또는 삽입을 방해한 요소)에 대한 반복자와 삽입이 발생한 경우에만
bool
값이
true
로 설정된 쌍입니다.
3-5)
삽입된 요소에 대한 반복자, 또는 삽입을 방해한 요소에 대한 반복자.
6)
(없음)
7)
삽입된 요소(또는 삽입을 방해한 요소)에 대한 반복자와, 삽입이 발생한 경우에만
bool
값이
true
로 설정된 한 쌍.
8-10)
(없음)
예외
1-5,7)
어떤 연산에 의해 예외가 발생하면, 삽입은 아무런 효과를 가지지 않습니다.
|
이 섹션은 불완전합니다
이유: 사례 6,8-10 |
복잡도
참고 사항
힌트를 사용한 삽입
(
3-5
)
은 시퀀스 컨테이너에서의 위치 지정 삽입(예:
std::vector::insert
)과 시그니처 호환성을 유지하기 위해 boolean 값을 반환하지 않습니다. 이로 인해
std::inserter
와 같은 일반화된 삽입기를 생성할 수 있습니다. 힌트 삽입의 성공 여부를 확인하는 한 가지 방법은 삽입 전후의
size()
값을 비교하는 것입니다.
예제
이 코드 실행
#include <cassert> #include <flat_set> #include <iostream> int main() { std::flat_set<int> set; auto result_1 = set.insert(3); assert(result_1.first != set.end()); // 유효한 반복자입니다 assert(*result_1.first == 3); if (result_1.second) std::cout << "insert done\n"; auto result_2 = set.insert(3); assert(result_2.first == result_1.first); // 동일한 반복자 assert(*result_2.first == 3); if (!result_2.second) std::cout << "no insertion\n"; }
출력:
insert done no insertion
참고 항목
|
제자리에서 요소를 생성
(public member function) |
|
|
힌트를 사용하여 제자리에서 요소들을 생성
(public member function) |
|
|
인수에서 추론된 타입의
std::insert_iterator
를 생성
(function template) |