首頁 >後端開發 >C++ >C++程式用於透過鍵更新字典的值

C++程式用於透過鍵更新字典的值

王林
王林轉載
2023-08-28 22:37:061051瀏覽

C++程式用於透過鍵更新字典的值

許多電腦語言都提供字典,這是一種資料結構。字典是一種更快的資料結構,它基於鍵和值來儲存資料。它保留了鍵值組合,以便鍵可以幾乎即時地輕鬆搜尋某些組件。 C STL 語言標準包括類似字典的資料結構。術語“map”用於描述這種資料結構。此映射會建立一對任意類型的鍵和值(由於我們使用的是 C ,因此必須在編譯之前定義類型)。本節將示範如何在 C 中更新已存在的對應或字典中的值。

我們先來看看地圖資料結構的定義。這些內部模板需要兩種不同的類型。下面顯示了語法和必要的函式庫 -

定義地圖資料結構的語法

#include <map>
map<type1, type2=""> mapVariable;
</type1,></map>

在這種情況下,我們必須導入「地圖」庫才能使用地圖資料結構。為此需要資料類型 1 和 2。 key參數的資料型別為type1,value參數的資料型別為type2。這裡從地圖類型類別派生的物件是mapVariable。現在讓我們看看如何使用 C 映射來獲取它。

在映射資料結構中,我們可以透過存取現有鍵或新鍵將值放入映射中。由於這裡我們討論的是更新值,因此我們必須更新現有的金鑰。鍵將像數組索引符號一樣用在方括號內。讓我們看看這個的語法 -

更新地圖內元素的語法

mapVariable [<the key="" value="">] = <the new="" value="">;
</the></the>

演算法

  • 已建立的字典或地圖 D

  • 已有鍵值k

  • #新金鑰 k 的值 v

  • 像 D[ k ] = v 一樣更新

  • 返回D

#範例

#include <iostream> 
#include <map> 
using namespace std;

void display( map <string, int>& givenMap ){
   for ( auto& it : givenMap ) {
      cout << "Key: " << it.first << ", value: " << it.second << endl;
   }
}
   
int main(){ 
   map<string, int> givenMap;
   
   givenMap = { { "ABCD", 25 },
        { "EFGH", 50 },
        { "IJKL", 75 },
        { "MNOP", 100 },
        { "QRST", 125 }
   };
   
   cout << "Before updation: " << endl;
   display( givenMap );
  
   cout << "After Updation: " << endl;
   
   //update the value of MNOP to 500
   givenMap[ "MNOP" ] = 500; 
   display( givenMap );
}

輸出

Before updation: 
Key: ABCD, value: 25
Key: EFGH, value: 50
Key: IJKL, value: 75
Key: MNOP, value: 100
Key: QRST, value: 125
After Updation: 
Key: ABCD, value: 25
Key: EFGH, value: 50
Key: IJKL, value: 75
Key: MNOP, value: 500
Key: QRST, value: 125

在此方法中,我們透過存取關鍵參數成功更新了值。然而,這個過程可能並不總是準確的。此過程有一個嚴重的缺點,即給定的鍵可能不存在於映射中。但透過使用此過程,它將插入具有給定值的新鍵。因此,在下一個方法中,我們將看到如何搜尋並在成功搜尋後更新元素。

搜尋後更新

可以使用地圖物件中的 find() 函數來檢查地圖中是否存在某個鍵。它將返回鍵的指針引用,否則,它將返回映射的“end()”指針,這表示映射不包含其中的元素。讓我們看看演算法和實現以便更好地理解。

演算法

  • 已建立的字典或地圖 D

  • 已有鍵值k

  • #新金鑰 k 的值 v

  • 建立一個迭代器物件itr來取得鍵值對的指標

  • 呼叫 find() 方法將字典 D 放入 itr

  • 如果 itr 不是 D 的結尾,則表示金鑰存在,則

    • 將 v 放入 itr

  • 結束如果

範例

#include <iostream> 
#include <map> 
using namespace std;

void display( map <string, int>& givenMap ){
   for ( auto& it : givenMap ) {
      cout << "Key: " << it.first << ", value: " << it.second << endl;
   }
}

void updateElement( map <string, int>& givenMap, string givenKey, int newValue ){
   map <string, int>::iterator itr;
   itr = givenMap.find( givenKey );
   if( itr != givenMap.end() ){   // when item has found
      itr->second = newValue;
   }
}
   
int main(){ 
   map<string, int> givenMap;
   
   givenMap = { { "ABCD", 25 },
        { "EFGH", 50 },
        { "IJKL", 75 },
        { "MNOP", 100 },
        { "QRST", 125 }
   };
   
   cout << "Before updation: " << endl;
   display( givenMap );
  
   cout << "After Updation: " << endl;
   
   //update the value of MNOP to 500
   updateElement( givenMap, "MNOP", 1580 );
   display( givenMap );
}

輸出

Before updation: 
Key: ABCD, value: 25
Key: EFGH, value: 50
Key: IJKL, value: 75
Key: MNOP, value: 100
Key: QRST, value: 125
After Updation: 
Key: ABCD, value: 25
Key: EFGH, value: 50
Key: IJKL, value: 75
Key: MNOP, value: 1580
Key: QRST, value: 125

在此方法中,updateElement函數將映射、現有鍵和 newValue 作為輸入。之後搜尋該密鑰。如果存在,則僅更新該值,否則只需從該函數中得出。因此,透過使用此方法,我們無法在地圖中建立新條目,而只能更新現有條目。

結論

在這篇文章中,我們了解如何使用鍵更新地圖中的元素。在第一種方法中,我們使用直接分配方法,該方法成功更新元素,但當鍵尚不存在時,它也可以添加新元素。第二種方法透過一開始的簡單搜尋消除了這個問題。有時我們可能會注意到第二種方法需要額外的時間來搜尋金鑰然後更新它。因此,與第一種方法相比,它需要更多的搜尋時間。但如果我們仔細思考,在第一種方法中,這項發現也本質上實現了。由於資料結構使用基於哈希的技術,因此它將在恆定時間內運行(在大多數情況下)。

以上是C++程式用於透過鍵更新字典的值的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除