Menu
Coddy logo textTech

쌍 삭제하기

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 27번째.

때로는 더 이상 필요하지 않은 키-값 쌍을 맵에서 제거해야 할 때가 있습니다. .erase() 메서드는 삭제하려는 키를 지정하여 요소를 삭제하는 간단한 방법을 제공합니다.

맵에서 요소를 제거하려면, 단순히 키를 인자로 하여 .erase()를 호출하면 됩니다:

std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;

scores.erase("Bob"); // Bob의 항목을 완전히 제거합니다

erase("Bob")을 호출한 후에는 맵에 Alice와 Carol의 점수만 포함됩니다. 맵에 존재하지 않는 키를 삭제하려고 하면, 작업은 아무런 동작도 하지 않으며 오류도 발생하지 않습니다.

범위 기반 for 루프를 사용하여 맵을 순회할 때, 각 요소는 키와 값을 포함하는 std::pair입니다. .first로 키에 접근하고 .second로 값에 접근할 수 있습니다:

for (auto pair : scores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

std::map은 키를 자동으로 정렬된 상태로 유지하므로, 각 이름과 점수를 알파벳 순서대로 출력할 것입니다.

이 메서드는 깨끗한 데이터 구조를 유지하거나, 오래된 정보를 제거하거나, 사용자가 애플리케이션에서 항목을 삭제할 수 있는 기능을 구현하는 데 특히 유용합니다.

challenge icon

챌린지

쉬움

std::map을 사용하여 연락처 디렉토리를 관리하는 프로그램을 작성하세요. 프로그램은 연락처 이름과 전화번호를 저장한 다음, .erase() 메서드를 사용하여 디렉토리에서 특정 연락처를 삭제할 수 있어야 합니다.

다음과 같은 입력이 제공됩니다:

  • 초기 연락처의 수를 나타내는 정수 n
  • 그 다음 n 쌍의 입력:
    • 연락처 이름을 나타내는 문자열
    • 전화번호를 나타내는 문자열
  • 삭제할 연락처의 수를 나타내는 정수 m
  • 그 다음 삭제할 연락처 이름들을 나타내는 m개의 문자열

프로그램은 다음을 수행해야 합니다:

  1. contacts라는 이름의 std::map<std::string, std::string>을 생성합니다.
  2. 초기 연락처 수를 읽고 연락처 이름과 전화번호로 맵을 채웁니다.
  3. 아래에 표시된 형식으로 초기 연락처 디렉토리를 출력합니다.
  4. 삭제할 연락처 수를 읽습니다.
  5. 삭제할 각 연락처 이름에 대해 .erase() 메서드를 사용하여 맵에서 해당 항목을 삭제합니다.
  6. 모든 삭제가 완료된 후 업데이트된 연락처 디렉토리를 출력합니다.

다음의 정확한 출력 형식을 사용하세요:

초기 디렉토리:

Initial Contact Directory:
[contact1]: [phone1]
[contact2]: [phone2]
[contact3]: [phone3]
...

삭제 후 업데이트된 디렉토리:

Updated Contact Directory:
[remaining_contact1]: [phone1]
[remaining_contact2]: [phone2]
...

모든 삭제 후 디렉토리가 비어 있게 되면 다음과 같이 출력합니다:

Updated Contact Directory:
Directory is empty

연락처는 맵을 순회할 때 나타나는 순서(연락처 이름의 알파벳 순서)대로 출력되어야 합니다. 두 번 모두 범위 기반 for 루프를 사용하여 맵을 순회하고, 연락처 이름은 pair.first로, 전화번호는 pair.second로 각 키-값 쌍에 접근하세요. 존재하지 않는 연락처를 삭제하려고 시도해도 오류가 발생하지 않으며, 맵은 단순히 변경되지 않은 상태로 유지된다는 점을 기억하세요.

직접 해보기

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    // 초기 연락처 개수 읽기
    int n;
    cin >> n;
    
    // 연락처 맵 생성
    map<string, string> contacts;
    
    // 초기 연락처 읽기
    for (int i = 0; i < n; i++) {
        string name, phone;
        cin >> name >> phone;
        // TODO: 맵에 연락처 추가
    }
    
    // 초기 디렉토리 출력
    cout << "Initial Contact Directory:" << endl;
    // TODO: 범위 기반 for 루프를 사용하여 모든 연락처 출력
    
    // 삭제할 연락처 개수 읽기
    int m;
    cin >> m;
    
    // 연락처 삭제
    for (int i = 0; i < m; i++) {
        string nameToRemove;
        cin >> nameToRemove;
        // TODO: .erase() 메서드를 사용하여 연락처 삭제
    }
    
    // 업데이트된 디렉토리 출력
    cout << "Updated Contact Directory:" << endl;
    // TODO: 남은 연락처를 출력하거나 비어 있는 경우 "Directory is empty" 출력
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직과 흐름의 모든 레슨