Namespaces
Variants

std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: emplace

From cppreference.net

template < class ... Args >
std:: pair < iterator, bool > emplace ( Args && ... args ) ;
(C++23부터)
(C++26부터 constexpr)

컨테이너에 해당 키를 가진 요소가 없을 경우, 주어진 args 로 제자리에서 생성된 새로운 요소를 삽입합니다.

객체 t std:: pair < key_type, mapped_type > 타입으로 초기화하며 std:: forward < Args > ( args ) ... 를 사용합니다. 만약 맵이 이미 t. first 와 동등한 키를 가진 요소를 포함하고 있다면, * this 는 변경되지 않습니다. 그렇지 않으면 다음 코드와 동일합니다:

auto key_it = ranges::upper_bound(c.keys, t.first, compare);
auto value_it = c.values.begin() + std::distance(c.keys.begin(), key_it);
c.keys.insert(key_it, std::move(t.first));
c.values.insert(value_it, std::move(t.second));

이 오버로드는 다음 조건이 std:: is_constructible_v < std:: pair < key_type, mapped_type > , Args... > 일 때만 오버로드 해결에 참여합니다.

만약 value_type EmplaceConstructible 하지 않고 flat_map args 로부터 생성될 수 없다면, 동작은 정의되지 않습니다.

목차

매개변수

args - 요소의 생성자에 전달할 인수들

반환값

삽입된 요소(또는 삽입을 방해한 요소)에 대한 반복자와, 삽입이 발생한 경우에만 bool 값이 true 로 설정된 쌍입니다.

예외

어떤 이유로든 예외가 발생하면, 이 함수는 아무런 효과를 가지지 않습니다( strong exception safety guarantee ).

복잡도

삽입이 발생하는 경우, 컨테이너 크기에 대해 선형 시간이 소요되며, 그렇지 않은 경우 컨테이너 크기에 대해 로그 시간이 소요됩니다

참고 사항

emplace 를 신중하게 사용하면 새로운 요소가 불필요한 복사 또는 이동 연산을 피하면서 생성될 수 있습니다.

예제

#include <iostream>
#include <string>
#include <utility>
#include <flat_map>
int main()
{
    std::flat_map<std::string, std::string> m;
    // pair의 이동 생성자 사용
    m.emplace(std::make_pair(std::string("a"), std::string("a")));
    // pair의 변환 이동 생성자 사용
    m.emplace(std::make_pair("b", "abcd"));
    // pair의 템플릿 생성자 사용
    m.emplace("d", "ddd");
    // 중복 키로 emplace하면 효과 없음
    m.emplace("d", "DDD");
    // pair의 piecewise 생성자 사용
    m.emplace(std::piecewise_construct,
              std::forward_as_tuple("c"),
              std::forward_as_tuple(10, 'c'));
    // 대안: m.try_emplace("c", 10, 'c');
    for (const auto& p : m)
        std::cout << p.first << " => " << p.second << '\n';
}

출력:

a => a
b => abcd
c => cccccccccc
d => ddd

참고 항목

힌트를 사용하여 제자리에서 요소를 생성합니다
(public member function)
키가 존재하지 않으면 제자리에서 삽입하고, 키가 존재하면 아무 작업도 수행하지 않습니다
(public member function)
요소를 삽입합니다
(public member function)