이번 편의 목표: vector로 제목 목록을 늘리고, map에서 번호로 가격을 찾습니다.
표준 라이브러리는 검증된 자료구조와 알고리즘입니다. 길이가 변하는 목록은 std::vector, 키로 값을 찾는 정렬 컨테이너는 std::map을 사용합니다. 12편에서 직접 하던 크기 계산과 해제를 이 타입들이 맡습니다.
#include <iostream>
#include <map>
#include <string>
#include <vector>
int main() {
std::vector<std::string> titles;
titles.push_back("개미");
titles.push_back("공책");
for (const std::string &title : titles) {
std::cout << title << '\n';
}
std::map<int, int> prices;
prices.insert({1, 12000});
auto found = prices.find(1);
if (found != prices.end()) {
std::cout << found->second << '\n';
}
return 0;
}범위 기반 for는 컨테이너의 각 원소를 한 번씩 꺼냅니다. const 참조로 받으면 제목을 복사하지 않고 바꾸지도 않습니다. find는 키가 없으면 end()를 반환합니다. 그 반복자를 역참조하기 전에 검사합니다.
map의 []는 키가 없으면 값을 기본값으로 새로 만듭니다. 조회만 할 때는 find를 씁니다. vector에 push_back을 반복하면 내부 배열이 더 큰 곳으로 이사할 수 있습니다. 이사 전에 얻어 둔 원소의 포인터와 참조는 더 이상 쓰이지 않습니다. 원소를 오래 가리켜야 하면 인덱스처럼 다시 찾을 수 있는 정보를 보관합니다.
직접 해 보기
제목을 하나 더 넣고, 없는 키 99를 find로 조회해 출력하지 않는지 확인하세요.
해설
목록 출력은 세 줄이 됩니다. find(99)는 end()와 같으므로 second를 읽지 않습니다. 없는 키를 prices[99]로 읽으면 0이 만들어지므로, 이 확인에는 맞지 않습니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.