我们首先看一下地图数据结构的定义。这些内部模板需要两种不同的类型。下面显示了语法和必要的库 -
定义地图数据结构的语法#include map mapvariable;
在这种情况下,我们必须导入“地图”库才能使用地图数据结构。为此需要数据类型 1 和 2。 key参数的数据类型为type1,value参数的数据类型为type2。这里从地图类型类派生的对象是mapvariable。现在让我们看看如何使用 c++ 映射来获取它。
在映射数据结构中,我们可以通过访问现有键或新键将值放入映射中。由于这里我们讨论的是更新值,因此我们必须更新现有的密钥。键将像数组索引符号一样用在方括号内。让我们看看这个的语法 -
更新地图内元素的语法mapvariable [] = ;
算法已创建的字典或地图 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: 25key: efgh, value: 50key: ijkl, value: 75key: mnop, value: 100key: qrst, value: 125after updation: key: abcd, value: 25key: efgh, value: 50key: ijkl, value: 75key: mnop, value: 500key: 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: 25key: efgh, value: 50key: ijkl, value: 75key: mnop, value: 100key: qrst, value: 125after updation: key: abcd, value: 25key: efgh, value: 50key: ijkl, value: 75key: mnop, value: 1580key: qrst, value: 125
在此方法中,updateelement函数将映射、现有键和 newvalue 作为输入。之后搜索该密钥。如果存在,则仅更新该值,否则只需从该函数中得出。因此,通过使用此方法,我们无法在地图中创建新条目,而只能更新现有条目。
结论在这篇文章中,我们了解了如何使用键更新地图中的元素。在第一种方法中,我们使用直接分配方法,该方法成功更新元素,但当键尚不存在时,它也可以添加新元素。第二种方法通过一开始的简单搜索消除了这个问题。有时我们可能会注意到第二种方法需要额外的时间来搜索密钥然后更新它。因此,与第一种方法相比,它需要更多的搜索时间。但如果我们仔细思考,在第一种方法中,这一发现也本质上得到了实现。由于数据结构使用基于哈希的技术,因此它将在恒定时间内运行(在大多数情况下)。
以上就是c++程序用于通过键更新字典的值的详细内容。
