使用map STL儲存學生學號和姓名的C++程式


假設我們有一個用於儲存學生學號和姓名的map資料結構,學號是整型資料,姓名是字串型別資料。在標準輸入中,我們提供n個查詢。每個查詢(每行)必須有兩個元素,對於型別1查詢,則有三個元素。第一個是運算子,第二個是學號,第三個是姓名,對於兩個元素的查詢,第二個元素是學號。操作如下:

  • 插入。這會將姓名插入到map中對應的學號下。

  • 刪除。這會從map中刪除對應學號的姓名(如果存在)。

  • 查詢。這會根據學號在map中查詢姓名,如果存在則顯示姓名,否則顯示“未找到”。

因此,如果輸入類似於n = 8,queries = [[1,5,"Atanu"], [1,8, "Tapan"], [1,3,"Manish"],[2,8],[1,9, "Piyali"], [3,8],[3,3], [3,5]],則輸出將是[未找到, Manish, Atanu],因為學號8不存在,學號3的學生姓名是Manish,學號5的學生姓名是"Atanu"。

為了解決這個問題,我們將遵循以下步驟:

  • n := 查詢的數量
  • 定義一個map m,鍵為整型,值為字串型別。
  • 當n不為零時,每次迭代減少n,執行以下操作:
    • 獲取當前查詢型別t
    • 獲取學號
    • 如果t等於1,則:
      • 獲取姓名
      • m[學號] := 姓名
    • 否則,如果t等於2,則:
      • m[學號] := 空字串
    • 否則:
      • 如果m[學號]不是空字串,則:
        • 顯示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

更新於:2021年10月7日

905 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.