如果我有一个结构,
struct temp
{
int var1, var2, var3, var4, var5;
}和如下所示的STL映射:
map < int, temp > mymap;现在,我只想更新var2的值,是否可以使用STL插入函数来实现?有人能带我到这里来吗?
谢谢
发布于 2013-09-27 23:40:19
Insert是用于插入的。如果你只是想要更新,那么你必须先find你想要更新的结构。例如。
map < int, temp >::iterator i = mymap.find(88); // find entry with key 88
if (i != mymap.end() // did we find it?
i->var = 99; // update vars2发布于 2013-09-27 23:40:46
据std::map::insert documentation介绍
插入操作检查每个插入的元素是否具有与容器中已有元素的键等效的键,如果有,则不插入该元素,并将迭代器返回到该现有元素
因此,您可以使用insert来检索已存在项的迭代器。
由于还提到了其他选项,包括find和索引运算符,我想这应该是总结,您可以根据需要进行选择:
#include <map>
#include <cstdlib>
#include <iostream>
struct Dummy
{
int nDummyValue;
};
int main(int argc, char** argv)
{
std::map<int, Dummy> Map;
Dummy DummyInstance = { 1 };
std::pair<std::map<int, Dummy>::iterator, bool> InsertionResult = Map.insert(std::pair<int, Dummy>(1, DummyInstance)); // Inserts {1, {1}}
InsertionResult.first->second.nDummyValue = 2; // Sets {1, {1} to {1, {2}}
DummyInstance.nDummyValue = 5;
Map[5] = DummyInstance; // Adds {5, {5}}
std::map<int, Dummy>::iterator MapIterator;
MapIterator = Map.find(4);
if(MapIterator != Map.end())
MapIterator->second.nDummyValue = 4; // Is not run because there is no element with key 5
MapIterator = Map.find(5);
if(MapIterator != Map.end())
MapIterator->second.nDummyValue = 10; // Changes {5, {5}} to {5, {10}}
for(std::map<int, Dummy>::iterator Iterator = Map.begin(); Iterator != Map.end(); ++Iterator)
std::cout << Iterator->first << " : " << Iterator->second.nDummyValue << std::endl;
return EXIT_SUCCESS;
}https://stackoverflow.com/questions/19054770
复制相似问题