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
}