Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 HashMap을 순회하며 값으로 항목 제거하는 방법

C++에서 HashMap(map)을 순회(iteration)하는 동안 특정 값(value)을 기준으로 항목을 제거하는 방법을 알아보겠습니다.

문제 예시

입력: HashMap: { 1: "Mango",
2: "Orange",
3: "Banana",
4: "Apple" }, value="Banana"

출력: HashMap: { 1: "Mango",
2: "Orange",
4: "Apple" }

설명: 세 번째 키-값 쌍이 값 "Banana"를 기준으로 제거되었습니다.

입력: HashMap: { 1: "Yellow",
2: "White",
3: "Green" }, value="White"

출력: HashMap: { 1: "Yellow",
3: "Green" }

문제 해결 접근 방식

C++에서는 .erase() 함수를 사용하여 요소를 제거할 수 있습니다. 이 함수는 키(key) 또는 반복자(iterator)를 인자로 받아 해당 요소를 삭제합니다. 이번 튜토리얼에서는 반복자를 사용하여 요소를 제거하는 방법을 다룹니다.

핵심 아이디어는 HashMap을 처음부터 끝까지 순회하면서 각 항목의 값이 목표 값과 일치하는지 검사하고, 일치하는 경우 해당 항목을 제거하는 것입니다.

반복자 무효화 주의 사항

순회 중에 요소를 제거하면 현재 반복자가 무효화(invalidation)될 수 있다는 점에 유의해야 합니다. 따라서 erase() 호출 후에는 반복자를 증가시키지 말고, erase()가 반환하는 다음 요소의 반복자를 사용해야 안전합니다. 아래 코드에서 이 패턴을 확인할 수 있습니다.

구현 예제

위 접근 방식의 C++ 코드

HashMap 순회 중 값으로 요소 제거하기

#include<iostream>
#include<map> // map 연산을 위한 헤더
using namespace std;

int main(){
    // HashMap 생성
    map< int, string > fruits;
    // HashMap에 키-값 쌍 삽입
    fruits[1]="Mango";
    fruits[2]="Orange";
    fruits[3]="Banana";
    fruits[4]="Apple";
    string value = "Banana";
    
    // 반복자 생성
    map<int, string>::iterator it;
    
    // 삭제 전 HashMap 출력
    cout<< "HashMap before Deletion:\n";
    for (it = fruits.begin(); it!=fruits.end(); ++it)
        cout << it->first << "->" << it->second << endl;
    
    // 값이 일치하는 항목을 찾아 제거
    for (it = fruits.begin(); it!=fruits.end(); ){
        // 현재 값과 목표 값을 비교
        if((it->second).compare(value) == 0){
            // 요소를 제거하고 다음 반복자를 반환받음
            it = fruits.erase(it);
        } else {
            ++it;
        }
    }
    
    // 삭제 후 HashMap 출력
    cout<< "HashMap After Deletion:\n";
    for (it = fruits.begin(); it!=fruits.end(); ++it)
        cout << it->first << "->" << it->second << endl;
    
    return 0;
}

실행 결과

HashMap before Deletion:
1->Mango
2->Orange
3->Banana
4->Apple

HashMap After Deletion:
1->Mango
2->Orange
4->Apple

마무리

이번 튜토리얼에서는 C++에서 HashMap을 순회하면서 값으로 항목을 제거하는 방법을 살펴보았습니다. 반복자를 활용해 각 항목의 값을 검사하고, 일치하는 경우 erase() 함수로 안전하게 삭제하는 과정을 예제 코드와 함께 확인했습니다. 이러한 접근 방식은 C뿐만 아니라 Java, Python 등 다른 프로그래밍 언어에서도 유사하게 응용할 수 있습니다. 이 튜토리얼이 도움이 되기를 바랍니다.