flat_map::try_emplace
flat_map::try_emplace (제자리 삽입 — 키 없을 때만)
평범하게 제자리 삽입하되, 키가 이미 있으면 아무것도 하지 않는 멤버 함수예요. <flat_map> 헤더, C++23부터.
출처: cppreference
본문
try_emplace는 키가 없을 때만 요소를 제자리 생성해 삽입해요. 키가 이미 있으면 아무 일도 하지 않고 기존 요소를 가리키는 반복자를 반환해요.
template< class... Args >
std::pair<iterator, bool> try_emplace( const Key& k, Args&&... args ); // (1)
- 이동 힌트 버전(2)도 있어요.
- 반환 값
{iterator, bool}. 삽입 시bool=true, 기존 키면false.
std::flat_map<std::string, std::vector<int>> m;
m.try_emplace("a", 1, 2, 3); // 키 없음 → 삽입, 값 {1,2,3}
auto [it, ok] = m.try_emplace("a", 9); // 키 있음 → 무시, ok==false
emplace와 달리, 키가 이미 있으면 인자(값 생성에 쓰일 객체)가 전혀 소비되지 않아요. 값 생성 비용이 클 때 키 중복 시 낭비를 막는 데 유용해요.