0

如果我有一个结构说,

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

和这样的 STL 映射:

map < int, temp >  mymap;

现在,我只想更新 的值var2,是否可以使用 STL 映射插入功能来做到这一点..?有人可以在这里指导我吗..?

谢谢

4

2 回答 2

1

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-27T15:40:19.447 回答
0

根据std::map::insert 文件

插入操作检查每个插入的元素是否具有与容器中已有元素的键等效的键,如果是,则不插入该元素,并返回一个指向该现有元素的迭代器

因此您可以使用它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;    
}
于 2013-09-27T15:40:45.533 回答