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
}