반응형
원래 작성했던 코드
최근에 회사에서 팀원분에게 코드 리뷰를 받은 사항에 대해서 정리하려고 한다. 아래의 코드는 내가 원래에 작성하던 스타일의 코드이다. 컨테이너에서 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 할 필요가 없다.
'프로그래밍 > C++' 카테고리의 다른 글
| C++ 표준 컨테이너는 언제나 깊은 복사를 한다. (0) | 2025.12.06 |
|---|---|
| C++ push_back()과 emplace_back() 차이 (0) | 2025.10.07 |
| C++ unordered_map이란? (1) | 2025.07.06 |
| 비주얼 스튜디오 2022(Visual Studio 2022)에서 C++ 언어 표준 변경하기 (0) | 2025.07.01 |
| C++ 소켓 프로그래밍(Socket Programming) 에코 클라이언트 (0) | 2024.07.31 |
댓글