사전적 의미로 집합이라는 뜻인데, 동일한 타입의 데이터를 모아놓은 것이다.
데이터는 정렬된 위치에 삽입되므로 검색 속도가 빠르고, 키가 중복되지 않는다.
셋의 형식으로 타입이 T형인 셋의 객체를 선언한 형태이다.
set <T> st;
일반 컨테이너와 사용 형태는 동일하다.
#include <iostream>
#include <set>
using namespace std;
int main()
{
int arr[] = {1, 5, 6, 2, 2, 3, 3 };
set<int> scon;
for(int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++) {
scon.insert(arr[i]);
}
set<int>::iterator it;
// key는 중복 제거, 정렬된 상태로 저장
for(it = scon.begin(); it != scon.end(); it++) {
cout << *it << endl;
}
return 0;
}
맵은 두 개의 데이터가 하나의 쌍을 이루어 저장하는 컨테이너로 정렬된 상태로 관리되고, 검색 속도가 빠르다.
대용량의 데이터를 검색할 경우 유리하고, 데이터 삽입, 삭제 시 데이터의 이동이 발생하므로 상대적으로 느리다.
맴의 형식으로 타입이 T형인 맵의 객체를 선언한 형태이다.
map<key,data> mp;
맵의 첫 번째 전달인자 key에는 숫자, 문자 타입 상관없이 들어올 수 있다.
맵의 두 번째 전달인자 data는 key를 통해 가져올 데이터를 의미하는데, 또한 숫자, 문자 타입 상관 없이 들어올 수 있다.
map<string, int> score;
// 값 넣기
score["Alice"] = 95;
score["Bob"] = 88;
score["Charlie"] = 72;
key value는 마치 편의점 물건 가격 처럼 > 새우장(1000원), 비타500(500원)
혹은 휴대폰: 김성훈: 010-xxxx-xxxx
#include <iostream>
#include <map>
#include <string>
using namespace std;
struct PhoneAddr {
string name;
int pnum;
}arPerson[] = {
{"김대리", 1234}, {"박과장", 5678}, {"홍대리", 2345}
}; //구조체에서 초기값을 줄 때, 자료형과는 상관없이 "멤버 선언 순서"대로 값이 들어간다는 게 핵심
int main()
{
map<string, int> person;
// 구조체 배열 맵에 넣기
for(int i = 0; i < sizeof(arPerson)/sizeof(arPerson[0]); i++)
{
person[arPerson[i].name] = arPerson[i].pnum;
}
map<string, int> :: iterator it;
string name;
cout << "이름 검색 : ";
cin >> name;
it = person.find(name);
if (it == person.end())
{
cout << "찾을 수 없습니다." << endl;
}
else
{
// it 는 포인터 이므로 간접참조연산자 사용
// map객체의 first는 키, second는 value
cout << name << "의 전화번호는 " << it-> second << "입니다." << endl;
}
return 0;
}
person[arPerson[i].name] = arPerson[i].pnum;
와, 너 진짜 중요한 포인트 짚었어!
person[arPerson[i].name] = arPerson[i].pnum; 이 문장을 보면 "이름이 전화번호를 덮는다" 느낌이 들 수 있어.
그 말은 아주 직관적인 표현이야, 단지 방향만 살~짝 바꿔 생각하면 딱 맞아.
이 코드에서 실제로 일어나는 일은:
"이름을 열쇠(key) 삼아서, 그에 해당하는 전화번호를 값(value) 으로 저장한다."
즉, 전화번호가 이름에 "붙는" 구조야.