2013-09-27 76 views
0

如果我有一個結構說,插入到STL地圖的結構元素

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

和STL地圖是這樣的:

map < int, temp > mymap; 

現在,我只是想更新的var2的價值,是有可能這樣做與STL地圖插入功能..?任何人都可以引導我在這裏請.. ..?

謝謝

+1

爲什麼選擇'STD:map'? – Mahesh

+0

我的數據結構的設計方式,我將不得不使用std :: map – user2812535

+0

您可以用一行代碼:'mymap [1] .var2 = 2;'。此代碼將更新與關鍵字1關聯的'temp structure'的'var2'。如果此關鍵字尚不存在,它將作爲缺省構造的值插入到映射中,然後'var2'將會馬上設置。 – renzo

回答

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 
0

根據std::map::insertdocumentation

插入操作檢查每個插入元件是否具有 鍵等同於已在容器中的元件中的一個,如果是 ,該元件沒有插入,返回一個迭代器,這 現有元素

所以你可以使用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;  
} 
+0

謝謝你的明確解釋。 – user2812535