키 존재 여부 확인하기
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 26번째.
대괄호 연산자는 맵 값을 액세스하는 데 편리하지만, 잠재적인 문제가 있습니다. 존재하지 않는 키에 액세스하려고 하면 어떻게 될까요? 이전 레슨에서 배웠듯이, 존재하지 않는 키와 함께 []를 사용하면 해당 키가 기본값과 함께 자동으로 생성됩니다.
때로는 실수로 새로운 항목을 생성하지 않고, 키에 접근하기 전에 해당 키가 존재하는지 확인하고 싶을 때가 있습니다. 이럴 때 .count() 메서드가 유용합니다. 이 메서드는 특정 키가 맵에 존재하는지 여부를 알려줍니다.
.count() 메서드는 키가 존재하면 1을, 존재하지 않으면 0을 반환합니다:
std::map<std::string, int> scores;
scores["Alice"] = 95;
if (scores.count("Alice")) {
std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
std::cout << "Alice not found" << std::endl;
}이 접근 방식을 사용하면 키의 존재 여부를 안전하게 확인하고 두 가지 경우를 모두 적절하게 처리할 수 있어, 맵에 원치 않는 항목이 생성되는 것을 방지할 수 있습니다.
챌린지
쉬움std::map을 사용하여 도서관 도서 대출 시스템을 관리하는 프로그램을 작성하세요. 프로그램은 어떤 책이 이용 가능한지 추적하고, .count() 메서드를 사용하여 도서 정보에 접근하기 전에 해당 도서가 존재하는지 안전하게 확인해야 합니다.
다음과 같은 입력이 제공됩니다:
- 도서관에 있는 도서의 수를 나타내는 정수
n - 그 다음
n쌍의 입력:- 도서 제목을 나타내는 문자열
- 이용 가능한 권수를 나타내는 정수
- 확인할 도서 요청 수를 나타내는 정수
m - 그 다음 검색할 도서 제목을 나타내는
m개의 문자열
프로그램은 다음을 수행해야 합니다:
library라는 이름의std::map<std::string, int>를 생성합니다.- 도서 수를 읽고 도서 제목과 이용 가능한 권수로 맵을 채웁니다.
- 도서 요청 수를 읽습니다.
- 각 도서 요청에 대해,
.count()메서드를 사용하여 도서관에 해당 도서가 존재하는지 확인합니다. - 도서 검색 여부에 따라 적절한 메시지를 출력합니다.
다음과 같은 정확한 출력 형식을 사용하세요:
각 도서 요청에 대해:
- 도서가 존재하는 경우:
Book "[book title]" is available with [number] copies - 도서가 존재하지 않는 경우:
Book "[book title]" is not available in the library
값에 접근하기 전에 if 문에서 .count() 메서드를 사용하여 도서의 존재 여부를 확인하세요. 만약 library.count(bookTitle)이 1을 반환하면 도서가 존재하는 것이므로 안전하게 library[bookTitle]에 접근하여 권수를 가져올 수 있습니다. 0을 반환하면 도서관에 해당 도서가 존재하지 않는 것입니다.
치트 시트
.count() 메서드는 새로운 항목을 생성하지 않고 맵에 키가 존재하는지 확인합니다. 키가 존재하면 1을 반환하고, 존재하지 않으면 0을 반환합니다:
std::map<std::string, int> scores;
scores["Alice"] = 95;
if (scores.count("Alice")) {
std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
std::cout << "Alice not found" << std::endl;
}이는 키 존재 여부를 확인할 때 원치 않는 항목이 실수로 생성되는 것을 방지하며, 기본값으로 키를 자동 생성하는 대괄호 연산자 []를 사용하는 것과는 다릅니다.
직접 해보기
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// 도서 수 읽기
int n;
cin >> n;
// 도서관 맵 생성
map<string, int> library;
// 도서 정보를 읽고 맵을 채움
for (int i = 0; i < n; i++) {
string title;
int copies;
cin >> title >> copies;
library[title] = copies;
}
// 도서 요청 수 읽기
int m;
cin >> m;
// TODO: 아래에 코드를 작성하세요
// .count() 메서드를 사용하여 각 도서 요청을 처리하세요
// 도서가 존재하는지 확인하고 적절한 메시지를 출력하세요
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.