unordered_map_insert_or_assign

unordered_map_insert_or_assign (std::unordered_map::insert_or_assign — 삽입 또는 대입)

std::unordered_map에 키가 없으면 삽입하고, 이미 있으면 매핑값을 지정한 값으로 덮어쓰는 멤버 함수예요.

출처: cppreference

본문

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

template< class M >
std::pair<iterator, bool> insert_or_assign( const Key& k, M&& obj );   // (1)
template< class M >
std::pair<iterator, bool> insert_or_assign( Key&& k, M&& obj );        // (2)
template< class M >
iterator insert_or_assign( const_iterator hint, const Key& k, M&& obj ); // (3)
template< class M >
iterator insert_or_assign( const_iterator hint, Key&& k, M&& obj );    // (4)

(1,2) k와 동등한 키가 없으면 obj에서 구성한 원소를 삽입해요. 이미 있으면 그 매핑값에 std::forward<M>(obj)를 대입해요.

(3,4) 힌트 오버로드.

매개변수

  • k: 찾거나 삽입할 키
  • hint: 힌트 이터레이터
  • obj: 삽입하거나 대입할 값

반환값

  • (1,2) {원소 이터레이터, 새로 삽입됐으면 true} 쌍.
  • (3,4) 원소 이터레이터.

복잡도

평균 상수(amortized constant)예요.

예제

#include <iostream>
#include <unordered_map>
int main()
{
    std::unordered_map<int, char> m{{1, 'a'}, {2, 'b'}};
    m.insert_or_assign(2, 'z');   // 대입
    m.insert_or_assign(3, 'c');   // 삽입
    std::cout << m[2] << ' ' << m[3] << '\n';   // z c
}

더 알아보기 (Learn more)

cppreference