map_emplace

map_emplace (std::map::emplace — 제자리 구성 삽입)

std::map에 새 원소를 변환식으로 제자리(in-place) 구성해 삽입하는 멤버 함수예요. 같은 키가 이미 있으면 삽입하지 않아요.

출처: cppreference

본문

시그니처는 다음과 같아요.

template< class... Args >
std::pair<iterator, bool> emplace( Args&&... args );   // (since C++11)

컨테이너에 그 키를 가진 원소가 없을 때, 주어진 args로 제자리 구성된 새 원소를 삽입해요. 새 원소(std::pair<const Key, T>)의 생성자는 emplace에 전달된 것과 똑같은 인자로, std::forward<Args>(args)...로 전달해 호출돼요.

컨테이너에 이미 그 키를 가진 원소가 있어도 원소가 구성될 수 있는데, 이 경우 새로 구성된 원소는 버려져요(파괴됨).

매개변수

  • args: 원소(value_type)의 생성자에 전달할 인자들.

반환값

  • 키가 이미 있으면 {기존 원소를 가리키는 이터레이터, false} 쌍.
  • 그렇지 않으면 {삽입된 원소를 가리키는 이터레이터, true} 쌍.

복잡도

컨테이너 크기에 대해 로그(logarithmic)예요.

예제

#include <iostream>
#include <map>
#include <utility>
int main()
{
    std::map<std::string, int> m;
    auto [it1, ok1] = m.emplace("a", 1);
    auto [it2, ok2] = m.emplace("a", 2);   // 이미 있음
    std::cout << ok1 << ' ' << ok2 << ' ' << m["a"] << '\n';  // 1 0 1
}

더 알아보기 (Learn more)

cppreference