unordered_map_try_emplace

unordered_map_try_emplace (std::unordered_map::try_emplace — 있으면 유지, 없으면 제자리 삽입)

std::unordered_map에 키가 없을 때만 새 원소를 제자리 구성해 삽입하는 멤버 함수예요. 이미 있으면 아무것도 바꾸지 않아요.

출처: cppreference

본문

시그니처는 다음과 같아요 (모두 since C++17).

template< class... Args >
std::pair<iterator, bool> try_emplace( const Key& k, Args&&... args );   // (1)
template< class... Args >
std::pair<iterator, bool> try_emplace( Key&& k, Args&&... args );        // (2)

(1,2) k와 동등한 키가 없다면 std::forward<Args>(args)...로 구성한 매핑값을 가진 원소를 삽입해요. 이미 있으면 삽입하지 않아요. emplace와 달리 이미 같은 키가 있을 때 인자 args가 평가되지 않아요.

매개변수

  • k: 찾거나 삽입할 키
  • args: 매핑값의 생성자에 전달할 인자들.

반환값

{원소 이터레이터, 새로 삽입됐으면 true} 쌍.

복잡도

평균 상수(amortized constant)예요.

예제

#include <iostream>
#include <unordered_map>
#include <string>
int main()
{
    std::unordered_map<int, std::string> m;
    m.try_emplace(1, "a");        // 삽입
    m.try_emplace(1, "b");        // 이미 있음, "b"는 안 만들어짐
    std::cout << m[1] << '\n';    // a
}

더 알아보기 (Learn more)

cppreference