Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

지도 STL을 사용하여 학생 명단과 이름을 저장하는 C++ 프로그램

<시간/>

학생 롤에 대한 맵 데이터 구조가 있고 롤 이름이 정수 데이터이고 이름이 문자열 유형 데이터라고 가정합니다. 표준 입력에서 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[롤]
      • 그렇지 않으면
        • "찾을 수 없음" 표시

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#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