如果我有一個結構說,插入到STL地圖的結構元素
struct temp
{
int var1, var2, var3, var4, var5;
}
和STL地圖是這樣的:
map < int, temp > mymap;
現在,我只是想更新的var2
的價值,是有可能這樣做與STL地圖插入功能..?任何人都可以引導我在這裏請.. ..?
謝謝
如果我有一個結構說,插入到STL地圖的結構元素
struct temp
{
int var1, var2, var3, var4, var5;
}
和STL地圖是這樣的:
map < int, temp > mymap;
現在,我只是想更新的var2
的價值,是有可能這樣做與STL地圖插入功能..?任何人都可以引導我在這裏請.. ..?
謝謝
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
根據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;
}
謝謝你的明確解釋。 – user2812535
爲什麼選擇'STD:map'? – Mahesh
我的數據結構的設計方式,我將不得不使用std :: map – user2812535
您可以用一行代碼:'mymap [1] .var2 = 2;'。此代碼將更新與關鍵字1關聯的'temp structure'的'var2'。如果此關鍵字尚不存在,它將作爲缺省構造的值插入到映射中,然後'var2'將會馬上設置。 – renzo