쌍 삭제하기
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의 점수만 포함됩니다. 만약 맵에 존재하지 않는 키를 삭제하려고 하면, 해당 작업은 아무런 동작도 하지 않으며 오류도 발생하지 않습니다.
이 메서드는 깨끗한 데이터 구조를 유지하거나, 오래된 정보를 제거하거나, 사용자가 애플리케이션에서 항목을 삭제할 수 있는 기능을 구현하는 데 특히 유용합니다.
챌린지
쉬움std::map을 사용하여 연락처 디렉토리를 관리하는 프로그램을 작성하세요. 프로그램은 연락처 이름과 전화번호를 저장한 다음, .erase() 메서드를 사용하여 디렉토리에서 특정 연락처를 삭제할 수 있어야 합니다.
다음과 같은 입력이 제공됩니다:
- 초기 연락처의 수를 나타내는 정수
n - 그 다음
n쌍의 입력:- 연락처 이름을 나타내는 문자열
- 전화번호를 나타내는 문자열
- 삭제할 연락처의 수를 나타내는 정수
m - 그 다음 삭제할 연락처 이름을 나타내는
m개의 문자열
프로그램은 다음을 수행해야 합니다:
contacts라는 이름의std::map<std::string, std::string>를 생성합니다.- 초기 연락처 수를 읽고 연락처 이름과 전화번호로 맵을 채웁니다.
- 아래에 표시된 형식으로 초기 연락처 디렉토리를 출력합니다.
- 삭제할 연락처 수를 읽습니다.
- 삭제할 각 연락처 이름에 대해
.erase()메서드를 사용하여 맵에서 해당 연락처를 삭제합니다. - 모든 삭제가 완료된 후 업데이트된 연락처 디렉토리를 출력합니다.
다음과 같은 정확한 출력 형식을 사용하세요:
초기 디렉토리:
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;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.