使用键更新字典值的C++程序
许多计算机语言都提供字典,这是一种数据结构。字典是一种更快的数据结构,它基于键和值存储数据。它保留键值对,以便键可以几乎实时地轻松搜索特定组件。C++ STL语言标准包含类似字典的数据结构。“map”一词用于描述这种数据结构。map创建任意类型的键值对(由于我们使用的是C++,因此必须在编译前定义类型)。本节将演示如何在C++中更新已存在的map或字典中的值。
让我们首先检查map数据结构的定义。这些内部模板需要两种不同的类型。以下是语法和必要的库:
map数据结构的定义语法
#include
在这种情况下,我们必须导入“map”库才能使用map数据结构。这需要数据类型1和2。键参数的数据类型是type1,值参数的数据类型是type2。此处从map类型类派生的对象是mapVariable。现在让我们看看如何使用C++ map来实现这一点。
在map数据结构中,我们可以通过访问现有键或新键将值放入map中。由于这里我们讨论的是更新值,因此我们必须更新现有键。键将像数组索引表示法一样用方括号括起来。让我们看看这方面的语法:
更新map中元素的语法
mapVariable [] = ;
算法
一个已创建的字典或map 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
在这种方法中,我们已成功通过访问键参数更新了值。但是,此过程并非一直准确。此过程有一个严重的缺点,即给定的键可能不存在于map中。但是,使用此过程将插入一个具有给定值的新键。因此,在下一种方法中,我们将看到如何在成功搜索后搜索和更新元素。
搜索后更新
可以使用map对象中的find()函数检查map中是否存在键。它将返回键的指针引用,否则将返回map的“end()”指针,这表示map中不包含该元素。让我们看看算法和实现以更好地理解。
算法
一个已创建的字典或map D
已存在的键值k
新键k的值v
创建一个迭代器对象itr以获取键值对的指针
调用字典D的find()方法到itr中
如果itr不是D的末尾,则表示键存在,然后
将v放入itr
结束if
示例
#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函数将map、现有键和newValue作为输入。之后搜索该键。如果存在,则只更新值,否则直接退出函数。因此,使用此方法,我们无法在map中创建新条目,而只能更新现有条目。
结论
在这篇文章中,我们了解了如何使用键更新map中的元素。在第一种方法中,我们使用直接赋值方法成功更新了元素,但当键不存在时,它也可以添加新元素。第二种方法通过在开始时进行简单的搜索来消除这个问题。有时我们可能会注意到,第二种方法需要额外的时间来搜索键然后更新它。因此,它比第一种方法需要额外的搜索时间。但是,如果我们仔细考虑,第一种方法中也隐含地进行了查找。由于使用的结构使用了基于散列的技术,因此它将在恒定时间内运行(在大多数情况下)。