pair는 C++에서 다른 라이브러리 없이도 만들 수 있는 자료구조다. pair를 통해 두 가지의 데이터를 묶어서 그룹화 할 수 있다. 만약 객체를 만들어야 할 경우 make_pair() 함수를 이용하면 된다.
//선언
pair<int, int> a;
pair<int, double> a(1, 10.0);
//vector와 pair를 같이 이용
vector<pair<int, int> > v;
//객체 생성
v.push_back(make_pair(1, 1));
map(또는 unordered_map)은 key와 value로 이루어져 있으며 key값을 통해 value값을 좀 더 빠르게 찾을 수 있다.(데이터의 양이 많아지면 unordered_map의 속도가 더 빠르다)
#include <map>
#include <string>
//map 생성
map<string, int> m;
//객체 입력
string s = "hello";
m.insert(make_pair(s, 1));
//객체 출력
cout << m[s] << endl; //1 출력

#include <string>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
vector<int> solution(vector<string> enroll, vector<string> referral, vector<string> seller, vector<int> amount) {
vector<int> answer(enroll.size(), 0);
unordered_map<string, pair<int, string> > search; //이름을 통해 현재 위치(int)와 다음 이름을 찾을 수 있음
string temp;
int money, left;
//탐색할 데이터 저장
for(int i = 0; i < enroll.size(); i++) search.insert(make_pair(enroll[i], make_pair(i, referral[i])));
//모든 판매에 대하여 반복 수행
for(int i = 0; i < seller.size(); i++){
//판매자와 남은 돈 초기화
temp = seller[i];
money = amount[i] * 100;
//최종 단계의 사람일 때가 아니고 돈도 있어야 반복 수행
while(temp.compare(string("-")) != 0 && money != 0){
auto &iter = search[temp]; //현재 이름에 해당하는 데이터 참조
left = money / 10; //잔돈 계산
answer[iter.first] += money - left; //해당 인원 금액 업데이트
money = left;
temp = iter.second;
}
}
return answer;
}