std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: 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
P
>
std:: pair < iterator, bool > insert ( P && x ) ; |
(5) | (C++23부터) |
|
template
<
class
P
>
iterator insert ( const_iterator pos, P && x ) ; |
(6) | (C++23부터) |
|
template
<
class
InputIt
>
void insert ( InputIt first, InputIt last ) ; |
(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)
value
를
pos
바로 앞 위치에 가능한 한 가깝게 삽입합니다.
return
emplace_hint
(
pos, value
)
;
와 동일합니다.
4)
value
를
pos
바로 앞 위치에 최대한 가깝게 삽입합니다.
return
emplace_hint
(
pos, std
::
move
(
value
)
)
;
와 동일합니다.
5)
만약
*
this
에 이미 투명하게 비교 가능한
동등한
요소가 포함되어 있으면 아무 작업도 수행하지 않습니다. 그렇지 않으면
x
를
*
this
에 다음과 같이 삽입합니다:
emplace
(
std::
forward
<
P
>
(
x
)
)
;
. 이 오버로드는
std::
is_constructible_v
<
std::
pair
<
key_type, mapped_type
>
, P
>
가
true
인 경우에만 오버로드 해결에 참여합니다.
6)
만약
*
this
가 이미 투명하게 비교 가능한
동등한
요소를 포함하고 있다면, 아무 작업도 수행하지 않습니다. 그렇지 않으면,
x
를
*
this
에
pos
바로 앞 위치에 가능한 한 가깝게 삽입합니다. 다음 코드와 동등합니다:
return
emplace_hint
(
pos,
std::
forward
<
P
>
(
x
)
)
;
. 이 오버로드는 다음 조건이
true
일 때만 오버로드 해결에 참여합니다:
std::
is_constructible_v
<
std::
pair
<
key_type, mapped_type
>
, P
>
.
7)
범위
[
first
,
last
)
의 요소들을 다음과 같은 연산을 순차적으로 수행하는 것처럼 삽입합니다:
-
다음처럼
c에 요소들을 추가합니다:
for ( ; first ! = last ; ++ first )
{
value_type value = * first ;
c. keys . insert ( c. keys . end ( ) , std :: move ( value. first ) ) ;
c. values . insert ( c. values . end ( ) , std :: move ( value. second ) ) ;
} -
새로 삽입된 요소들의 범위를
value_comp를 기준으로 정렬합니다. - 결과로 얻은 정렬된 범위와 기존 요소들의 정렬된 범위를 단일 정렬된 범위로 병합합니다.
-
다음과 같이 중복 요소들을 제거합니다:
auto zv = std :: views:: zip ( c. keys , c. values ) ;
auto it = ranges:: unique ( zv, key_equiv ( compare ) ) . begin ( ) ;
auto dist = std:: distance ( zv. begin ( ) , it ) ;
c. keys . erase ( c. keys . begin ( ) + dist, c. keys . end ( ) ) ;
c. values . erase ( c. values . begin ( ) + dist, c. values . end ( ) ) ;
제자리 병합 작업 중 메모리를 할당할 수 있습니다.
범위 내에서 비교 시 동등한 키를 가진 여러 요소가 있는 경우, 어떤 요소가 삽입될지 명시되지 않습니다 (보류 중인
LWG2844
).
8)
범위
[
first
,
last
)
의 요소들을 다음과 같은 작업을 순차적으로 수행하는 것처럼 삽입합니다:
-
다음 작업처럼
c에 요소들을 추가합니다:
for ( ; first ! = last ; ++ first )
{
value_type value = * first ;
c. keys . insert ( c. keys . end ( ) , std :: move ( value. first ) ) ;
c. values . insert ( c. values . end ( ) , std :: move ( value. second ) ) ;
} - 새로 추가된 요소들의 정렬된 범위와 기존 요소들의 정렬된 범위를 단일 정렬된 범위로 병합합니다.
-
다음 작업처럼 중복 요소들을 제거합니다:
auto zv = std :: views:: zip ( c. keys , c. values ) ;
auto it = ranges:: unique ( zv, key_equiv ( compare ) ) . begin ( ) ;
auto dist = std:: distance ( zv. begin ( ) , it ) ;
c. keys . erase ( c. keys . begin ( ) + dist, c. keys . end ( ) ) ;
c. values . erase ( c. values . begin ( ) + dist, c. values . end ( ) ) ;
제자리 병합 작업 중 메모리를 할당할 수 있습니다.
범위 내에 비교 동등한 키를 가진 여러 요소가 있는 경우, 어떤 요소가 삽입될지 지정되지 않습니다 (보류 중인
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 | - |
입력 시퀀스가 정렬되어 있고(
value_comp()
기준) 고유한 요소만 포함함을 나타내는 분해 태그
|
| 타입 요구사항 | ||
-
InputIt
는
LegacyInputIterator
요구사항을 충족해야 함.
|
||
반환값
1,2)
삽입된 요소(또는 삽입을 방해한 요소)에 대한 반복자와 삽입이 발생한 경우에만
bool
값이
true
로 설정된 쌍입니다.
3,4)
삽입된 요소에 대한 반복자, 또는 삽입을 방해한 요소에 대한 반복자.
5)
삽입된 요소(또는 삽입을 방해한 요소)에 대한 반복자와 삽입이 발생한 경우에만
bool
값이
true
로 설정된 쌍.
6)
삽입된 요소에 대한 반복자, 또는 삽입을 방해한 요소에 대한 반복자.
7-10)
(없음)
예외
1-6)
어떤 연산에 의해 예외가 발생하면, 삽입은 아무런 효과를 가지지 않습니다.
|
이 섹션은 불완전합니다
이유: 사례 7-10 |
복잡도
1-6)
size()
에 대해 선형 시간 복잡도를 가집니다.
8)
크기에 대해 선형적으로
size()
.
참고 사항
힌트를 사용한 삽입
(
(
3,4
)
및
(
6
)
)은
std::vector::insert
와 같은 순차 컨테이너의 위치 기반 삽입과 시그니처 호환성을 유지하기 위해 boolean을 반환하지 않습니다. 이를 통해
std::inserter
와 같은 일반화된 삽입기를 생성할 수 있습니다. 힌트 삽입의 성공 여부를 확인하는 한 가지 방법은 삽입 전후의
size()
를 비교하는 것입니다.
예제
|
이 섹션은 불완전합니다
이유: 예제가 없음 |
참고 항목
|
제자리에서 요소를 생성
(public member function) |
|
|
힌트를 사용하여 제자리에서 요소 생성
(public member function) |
|
|
요소를 삽입하거나 키가 이미 존재하는 경우 현재 요소에 할당
(public member function) |
|
|
인수에서 유추된 타입의
std::insert_iterator
생성
(function template) |