2017-07-19 79 views
0

在地圖循環的地圖期間,插入數據的正確方法是什麼?C++ - 在地圖循環的地圖中插入數據

在我的代碼中第一時刻一個函數裏面我一些數據插入到我的地圖是這樣的(和它的工作好)的:

outMap[TYPE_REQ_USER][req->number] = req; 

這是我的地圖大小後爲1

在第二個時刻,在其他功能,我需要迭代地圖,如果我發現密鑰TYPE_REQ_USER我需要添加一個新的數據到地圖的地圖。我嘗試這樣的,但在這之後我打印的地圖尺寸,我們表示,其1,而不是2(預期)

我的地圖循環的地圖中插入數據:

for (outMap_t::iterator itOutMap = outMap.begin(); itOutMap != outMap.end(); ++ itOutMap) 
{ 
     for (intMap_t::iterator itInMap = itOutMap->second.begin(); itInMap != itOutMap->second.end(); ++itInMap) 
     { 
     if (itOutMap->first == TYPE_REQ_USER) 
     { 
      //map insert 
      outMap[TYPE_REQ_USER][req->number] = req; 
     } 
     } 
} 

那麼,什麼是錯誤的,我循環插入?

編輯2

所以現在對於相同的鍵(TYPE_REQ_USER)1可以具有兩個不同的元件。

所以知道當我試圖重複的地圖和刪除我遇到的分段錯誤的關鍵要素,因爲在第一次迭代I做到:

qnRunningType_JobId.erase(itOutMap);

但在第二次迭代我有分割方法故障錯誤,因爲我試圖刪除itOutMap但我們已經在第一次迭代中刪除..

+0

您是否通過引用將地圖的地圖傳遞給函數?您可能正在複製它,以免在您的功能中進行持續更改。 另外,您是否錯誤地覆蓋了該值,而不是添加新的值? – hnefatl

+0

Nop,因爲地圖的地圖屬於我有這個功能的類。所以它只調用地圖的地圖 – RMRMaster

+0

發佈一些更多的代碼 - 兩個函數的相關位和它們所屬的類。 – hnefatl

回答

1

(註釋轉換回答的完整性)

使用std::map,插入已存在的項目將覆蓋現有的項目。如here所述,您可以使用std::map::insert並檢查返回對的第二項來檢查是否覆蓋了某個項目。

+0

謝謝。我已經解決了這個問題,當我插入循環迭代我做: outMap [it-> first] [req-> number] = req; it-> first等於TYPE_REQ_USER,所以對於相同的TYPE_REQ_USER我有兩個不同的元素。 請參閱我的編輯2,看到我的新問題 – RMRMaster

+0

FORGET ..我已經解決了。謝謝您的幫助 – RMRMaster