插入STL地图结构元素

时间:2013-09-27 15:37:46

标签: c++ oop vector map stl

如果我有结构说,

struct temp
{
  int var1, var2, var3, var4, var5;
}

和这样的STL地图:

map < int, temp >  mymap;

现在,我只想更新var2的值,是否可以使用STL map insert函数进行更新。?任何人都可以在这里指导我吗??

谢谢

2 个答案:

答案 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;    
}