STL 맵 (map)
맵은 키-값 쌍을 저장하는 연관 컨테이너로, 키를 기준으로 자동으로 정렬됩니다. 맵은 키의 중복을 허용하지 않습니다.
1. 맵 초기화와 기본 연산
맵을 선언하고 초기화하는 방법:
#include <iostream>
#include <map>
using namespace std;
int main() {
map<string, int> m;
// 요소 추가
m["Alice"] = 30;
m["Bob"] = 25;
m["Charlie"] = 35;
// 요소 출력
for (map<string, int>::iterator it = m.begin(); it != m.end(); ++it) {
cout << it->first << ": " << it->second << endl;
}
// 요소 찾기
map<string, int>::iterator it = m.find("Bob");
if (it != m.end()) {
cout << "Found Bob, age: " << it->second << endl;
}
// 요소 제거
m.erase("Alice");
// 요소 출력
for (map<string, int>::iterator it = m.begin(); it != m.end(); ++it) {
cout << it->first << ": " << it->second << endl;
}
return 0;
}
2. 맵의 주요 함수
insert()
: 키-값 쌍을 맵에 추가erase()
: 특정 키를 가진 요소를 제거find()
: 특정 키를 가진 요소를 찾음size()
: 맵의 크기를 반환begin()
: 맵의 첫 번째 요소를 가리키는 반복자를 반환end()
: 맵의 마지막 요소 다음을 가리키는 반복자를 반환clear()
: 맵의 모든 요소를 제거
STL 셋 (set)
셋은 중복되지 않는 원소들의 집합을 저장하는 컨테이너로, 원소를 기준으로 자동으로 정렬됩니다.
1. 셋 초기화와 기본 연산
셋을 선언하고 초기화하는 방법:
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> s;
// 요소 추가
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(2); // 중복된 요소는 추가되지 않음
// 요소 출력
for (set<int>::iterator it = s.begin(); it != s.end(); ++it) {
cout << *it << " ";
}
cout << endl;
// 요소 찾기
set<int>::iterator it = s.find(2);
if (it != s.end()) {
cout << "Found 2" << endl;
}
// 요소 제거
s.erase(1);
// 요소 출력
for (set<int>::iterator it = s.begin(); it != s.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
2. 셋의 주요 함수
insert()
: 원소를 셋에 추가erase()
: 특정 원소를 제거find()
: 특정 원소를 찾음size()
: 셋의 크기를 반환begin()
: 셋의 첫 번째 원소를 가리키는 반복자를 반환end()
: 셋의 마지막 원소 다음을 가리키는 반복자를 반환clear()
: 셋의 모든 원소를 제거
예제 문제
문제 1: 학생의 이름과 점수를 관리하는 프로그램 작성 (맵 사용)
사용자로부터 학생의 이름과 점수를 입력받아 맵에 저장하고, 맵의 내용을 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<string, int> students;
string name;
int score;
cout << "Enter student name and score (type 'stop' for name to end): ";
while (cin >> name && name != "stop") {
cin >> score;
students[name] = score;
}
cout << "Student scores: " << endl;
for (map<string, int>::iterator it = students.begin(); it != students.end(); ++it) {
cout << it->first << ": " << it->second << endl;
}
return 0;
}
이 프로그램은 사용자로부터 학생의 이름과 점수를 입력받아 맵에 저장하고, 맵의 내용을 출력합니다.
문제 2: 중복되지 않는 숫자를 관리하는 프로그램 작성 (셋 사용)
사용자로부터 숫자를 입력받아 셋에 저장하고, 셋의 내용을 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> numbers;
int num;
cout << "Enter numbers (type -1 to end): ";
while (cin >> num && num != -1) {
numbers.insert(num);
}
cout << "Unique numbers: ";
for (set<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
이 프로그램은 사용자로부터 숫자를 입력받아 셋에 저장하고, 셋의 내용을 출력합니다.
문제 3: 학생의 이름과 점수를 관리하는 프로그램 작성 (맵과 셋 사용)
사용자로부터 학생의 이름과 점수를 입력받아 맵에 저장하고, 점수가 중복되지 않도록 셋을 사용하여 점수를 관리하는 프로그램을 작성하세요.
해설:
#include <iostream>
#include <map>
#include <set>
#include <string>
using namespace std;
int main() {
map<string, int> students;
set<int> scores;
string name;
int score;
cout << "Enter student name and score (type 'stop' for name to end): ";
while (cin >> name && name != "stop") {
cin >> score;
if (scores.find(score) == scores.end()) { // 점수가 중복되지 않으면
students[name] = score;
scores.insert(score);
} else {
cout << "Score already exists. Please enter a different score." << endl;
}
}
cout << "Student scores: " << endl;
for (map<string, int>::iterator it = students.begin(); it != students.end(); ++it) {
cout << it->first << ": " << it->second << endl;
}
return 0;
}
이 프로그램은 사용자로부터 학생의 이름과 점수를 입력받아 맵에 저장하고, 셋을 사용하여 점수가 중복되지 않도록 관리합니다.
다음 단계
21일차의 목표는 C++의 STL 맵과 셋에 대해 학습하는 것이었습니다. 다음 날부터는 파일 입출력에 대해 다룰 것입니다.
내일은 "파일 입출력"에 대해 다룰 예정입니다. 질문이나 피드백이 있으면 댓글로 남겨 주세요!
'-----ETC----- > C++ 마스터 시리즈' 카테고리의 다른 글
[C++ 마스터] Day 23: 프로젝트 - 간단한 콘솔 게임 만들기 (1) (0) | 2024.08.01 |
---|---|
[C++ 마스터] Day 20: STL 벡터와 리스트 (0) | 2024.08.01 |
[C++ 마스터] Day 18: 예외 처리 (0) | 2024.08.01 |
[C++ 마스터] Day 19: 표준 템플릿 라이브러리 (STL) 소개 (0) | 2024.08.01 |
[C++ 마스터] Day 16: 가상 함수와 추상 클래스 (0) | 2024.08.01 |