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의 점수만 포함됩니다. 만약 맵에 존재하지 않는 키를 삭제하려고 하면, 해당 작업은 아무런 동작도 하지 않으며 오류도 발생하지 않습니다.

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

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로 각 키-값 쌍에 접근하세요. 존재하지 않는 연락처를 삭제하려고 시도해도 오류가 발생하지 않으며, 맵은 변경되지 않은 상태로 유지된다는 점을 기억하세요.

치트 시트

map에서 요소를 제거하려면 키와 함께 .erase() 메서드를 사용하세요:

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

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

키가 존재하지 않으면 .erase()는 아무 작업도 수행하지 않으며 오류가 발생하지 않습니다.

직접 해보기

#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실력 점검

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

로직과 흐름의 모든 레슨