본문 바로가기
프로그래밍/C++

C++ std::map, std::unordered_map 사용시 erase 단순화하기

by bantomak 2025. 9. 22.
반응형

원래 작성했던 코드

최근에 회사에서 팀원분에게 코드 리뷰를 받은 사항에 대해서 정리하려고 한다. 아래의 코드는 내가 원래에 작성하던 스타일의 코드이다. 컨테이너에서 find를 하고 값이 있으면 제거한다.

const auto& iter = m_deactivatedTids.find(tid);
if (iter != m_deactivatedTids.end())
{
    m_deactivatedTids.erase(iter);
}

단순화한 코드

하지만 팀원분이 제안한 코드는 아래와 같다. erase(key)를 사용할 때는 find가 필요 없다는 것이다.

m_deactivatedTids.erase(tid);

erase() 메서드의 동작

  • std::map이나 std::unordered_map에서 erase(key)는 내부적으로 find(key)를 실행한다.
  • 해당 키가 존재하면 제거하고 없으면 아무 일도 하지 않는다. (예외도 발생하지 않음)
  • 따라서 erase(key)를 사용하기 전에 find를 통해서 해당 키에 해당하는 값이 있는지 확인하는 건 불필요하다.
  • 따라서 std::map이나 std::unordered_map에서 erase(key)를 사용할때는 find 없이 단독으로 사용하자.

정리하자면

즉, std::map이나 std::unordered_map에서는 erase(key)를 사용하면,

해당 키값이 있으면 삭제, 없으면 무시한다는 안전한 동작이 보장되므로, 굳이 find 이후 erase 할 필요가 없다.

댓글