如果我有结构说,
struct temp
{
int var1, var2, var3, var4, var5;
}
和这样的STL地图:
map < int, temp > mymap;
现在,我只想更新var2
的值,是否可以使用STL map insert函数进行更新。?任何人都可以在这里指导我吗??
谢谢
答案 0 :(得分:1)
Insert
用于插入。如果您只想更新,则必须先find
要更新的结构。 E.g。
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
答案 1 :(得分:0)
根据std::map::insert
documentation:
插入操作检查每个插入的元素是否具有 key等效于容器中已有的元素之一,以及 如果是这样,则不插入元素,将迭代器返回给它 现有元素
因此您可以使用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;
}