학생 롤에 대한 맵 데이터 구조가 있고 롤 이름이 정수 데이터이고 이름이 문자열 유형 데이터라고 가정합니다. 표준 입력에서 n개의 쿼리를 제공합니다. 각 쿼리(각 줄에)에는 두 개의 요소가 있어야 하고 유형 1 쿼리에는 세 개의 요소가 있어야 합니다. 첫 번째는 연산자이고 두 번째는 롤이고 세 번째는 이름입니다. 두 요소 쿼리의 경우 두 번째 항목은 롤 번호입니다. 작업은 다음과 같습니다-
-
끼워 넣다. 그러면 해당 롤의 지도에 이름이 삽입됩니다.
-
삭제. 지도에서 롤 번호에 대해 삭제됩니다(있는 경우).
-
검색. 그러면 롤 번호가 있는 지도에서 이름이 검색됩니다. 존재하는 경우 이름이 표시되고, 그렇지 않으면 찾을 수 없음이 표시됩니다.
따라서 입력이 n =8과 같으면 쿼리 =[[1,5,"Atanu"], [1,8, "Tapan"], [1,3,"Manish"],[2,8], [1,9, "Piyali"], [3,8],[3,3], [3,5]], 그러면 출력은 [Not found, Manish, Atanu]가 됩니다. 왜냐하면 롤 8이 존재하지 않기 때문입니다. 롤 3의 학생 이름은 Manish이고 롤 5의 학생 이름은 "Atanu"입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- n :=쿼리 수
- 정수 유형 키와 문자열 유형 값의 하나의 맵 m을 정의합니다.
- n이 0이 아닌 동안 각 반복에서 n을 감소시키고 다음을 수행합니다.
- 현재 쿼리 유형 사용
- 롤 번호 받기
- t가 1과 같으면 다음과 같습니다.
- 이름을 가져라
- m[롤] :=이름
- 그렇지 않고 t가 2와 같을 때:
- m[roll] :=빈 문자열
- 그렇지 않으면
- m[roll]이 공백 문자열이 아닌 경우:
- 디스플레이 m[롤]
- 그렇지 않으면
- "찾을 수 없음" 표시
- m[roll]이 공백 문자열이 아닌 경우:
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <iostream> #include <map> using namespace std; int main(){ int n; cin >> n; map<int, string> m; while (n--) { int t; cin >> t; int roll; cin >> roll; if (t == 1) { string name; cin >> name; m[roll] = name; } else if (t == 2) { m[roll] = ""; } else { if(m[roll] != "") cout << m[roll] << endl; else cout << "Not found" << endl; } } }
입력
8 1 5 Atanu 1 8 Tapan 1 3 Manish 2 8 1 9 Piyali 3 8 3 3 3 5
출력
Not found Manish Atanu