我的理解是,你有兩個變量是這樣的:
map<DWORD, list<pair<string, LARGE_INTEGER>>> map_to_list_items;
map<DWORD, list<pair<string, LARGE_INTEGER>>> map_list_tempos_threads;
可以做,以簡化代碼的第一件事就是使用新的C++ 11的auto
關鍵字,而不是明確鍵入整個繁瑣的迭代器名稱:
auto it = map_list_tempos_threads.find(dwThreadID);
(請注意,你可能在你的代碼中的一些錯別字,因爲你有dwTheadID
而不是dwThreadID
和..._itens
而不是..._items
)。
然後,您可以簡單地使用std::map::operator[]
超載在地圖上插入新項目,如果它是不存在:
if (it == map_to_list_items.end())
{
//
// Insert the new list<pair<string, LARGE_INTEGER>> in the map,
// assuming:
// - key: dwThreadID
// - string: "Start"
// - LARGE_INTEGER: m_TimePRE
//
list<pair<string, LARGE_INTEGER>> l;
string s = "Start";
l.push_back(make_pair(s, m_TimePRE)) // I'm assuming m_TimePRE is a LARGE_INTEGER
map_to_list_items[dwThreadID] = move(l); // Move the list into the map
}
編輯:
這是一個非常短的版本爲插入的代碼:
map_to_list_items[dwThreadID].emplace_back("Start", m_TimePRE);
關鍵的一點是,如果dwThreadID
(該「鑰匙」)在地圖中是而不是,默認構造的「值」(即, list<pair<string, LARGE_INTEGER>>
)在地圖上由operator[]
重載創建,並返回對其的引用。
然後,在該引用上調用list::emplace_back()
,並將新的("Start", m_TimePRE)
對添加到(以前爲空,因爲默認構造的)列表。
在這種形式下輸入的數量要少得多,但是有幾項操作發生在「引擎蓋下」;相反,在第一種形式中,代碼及其邏輯步驟更加明確。
你的編譯器說什麼錯誤? – CoryKramer
地圖的值類型是成對的列表,但您只想插入一對 – Brian
我看到您正在使用'>>>'而不是'>>>(注意空格)關閉您的模板。你在使用C++ 11嗎? –