(cpp)Baekjoon 7785번 문제 ‘회사에 있는 사람’ - 자료 구조,해시를 사용한 집합과 맵
문제풀이
이름과 상태를 전부 입력 받아서 m[name]=state로 매핑한다. m[name]=true 또는 false인지 확인해서 true인 경우의 name을 출력한다. map은 기본적으로 key기준으로 오름차순정렬 되어 있으므로 greater
코드
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
using namespace std;
int n,cnt;
string name, state;
map<string, bool,greater<string>> m;
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> name >> state;
if (state == "enter") {
m[name] = true;
}
else {
m[name] = false;
}
}
map<string, bool>::iterator it;
for (it = m.begin(); it != m.end(); it++) {
if (it->second) {
cout << it->first << '\n';
}
}
}
- map<key,value> : 각 노드가 key와 value 쌍으로 이루어진 트리
- map이 배열처럼 되어 있는 것이 아니라 key를 지정해주면 그에 해당하는 value를 출력할 수 있음. 따라서, for문 으로 0부터 m의 size만큼 돌려보는 것이 아니고 ‘map<string,bool>::iterator it’를 통해 반복자를 지정해주어야 한다.
- m[name]=state의 경우 it->first로 쓰면 name을 나타내고 it->second로 쓰면 state를 나타냄.
- m[1],m[2].. 이런식으로 되어 있는게 아님