Menu
Coddy logo textTech

쌍 삭제하기

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

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

map에서 요소를 제거하려면 키를 인수로 사용하여 .erase()를 호출하면 됩니다:

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

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

erase("Bob")을 호출한 후, map에는 Alice와 Carol의 scores만 포함됩니다. map에 존재하지 않는 키를 지우려고 하면 작업은 단순히 아무것도 하지 않습니다. 오류가 발생하지 않습니다.

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

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

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

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

challenge icon

챌린지

쉬움

std::map을 사용하여 contact directory를 관리하는 프로그램을 작성하세요. 프로그램은 contact 이름과 phone number를 저장한 다음, 사용자가 .erase() method를 사용하여 directory에서 특정 contact를 제거할 수 있도록 해야 합니다.

다음 입력이 제공됩니다:

  • initial contact의 수를 나타내는 정수 n
  • 그다음 n개의 입력 pair:
    • contact 이름을 나타내는 string
    • phone number를 나타내는 string
  • 제거할 contact의 수를 나타내는 정수 m
  • 그다음 제거할 contact 이름을 나타내는 m개의 string

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

  1. contacts라는 이름의 std::map<std::string, std::string>을 Create합니다.
  2. initial contact의 수를 Read하고 contact 이름과 phone number로 map을 채웁니다.
  3. 아래에 표시된 형식으로 Initial contact directory를 Print합니다.
  4. 제거할 contact의 수를 Read합니다.
  5. 제거할 각 contact 이름에 대해 .erase() method를 사용하여 map에서 제거합니다.
  6. 모든 제거가 끝난 후 Updated contact directory를 Print합니다.

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

Initial directory:

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

제거 후의 Updated directory:

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

모든 제거 후 directory가 empty가 되면 다음을 Print합니다:

Updated Contact Directory:
Directory is empty

contact는 map을 순회할 때 나타나는 순서(contact 이름을 기준으로 한 alphabetical order)로 Print되어야 합니다. 두 번 모두 range-based for loop를 사용하여 map을 순회하고, 각 key-value pair에 대해 pair.first로 contact 이름에 접근하고 pair.second로 phone number에 접근하세요. 존재하지 않는 contact를 erase하려고 해도 error가 발생하지 않으며, map은 단순히 변경되지 않은 상태로 유지된다는 점을 기억하세요.

직접 해보기

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

int main() {
    // Read number of initial contacts
    int n;
    cin >> n;
    
    // 연락처 맵 생성
    map<string, string> contacts;
    
    // Read initial 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: Print remaining contacts or "Directory is empty" if empty
    
    return 0;
}
quiz icon실력 점검

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

로직과 흐름의 모든 레슨

직접 연습해 보세요: 온라인 C++ 컴파일러