[英]How can I insert values at map to list pair?
我的容器是這樣的:
map<DWORD, list<pair<string,LARGE_INTEGER>>> map_to_list_items;
此代碼無法編譯:
map<DWORD, list<pair<string,LARGE_INTEGER>>>::iterator iter_map_to_list_items = map_list_items.find(dwThreadID);
if ( iter_map_to_list_items == map_to_list_items.end() )
{
map_to_list_itens.insert ( pair<DWORD,pair<string,LARGE_INTEGER>>(dwTheadID, (string("Start"), m_TimePRE)));
}
您正在嘗試插入pair<string, LARGE_INTEGER>
作為list<pair<string, LARGE_INTEGER>>
。
即你有一張map<D, list<pair<S, L>>
,如下所示:
D1 -> list [pair1, pair2, pair3, ...]
D2 -> list [pair4, ...]
你想做什么:
D3 -> pairX
,
你應該做什么:
D3 -> list[pairX]
我的理解是你有兩個這樣的變量:
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
( “key” ) 不在地圖中,則由operator[]
重載在地圖中創建默認構造的“值” (即list<pair<string, LARGE_INTEGER>>
) ,並返回對它的引用。
然后,在該引用上調用list::emplace_back()
,並將新的("Start", m_TimePRE)
對添加到(以前為空,自默認構造)列表中。
使用這種形式,輸入的次數要少得多,但是有幾次操作是在“引擎蓋下”發生的; 相反,在第一種形式中,代碼及其邏輯步驟更明確。
map<DWORD, list<pair<string,LARGE_INTEGER>>> map_to_list_itens;
所以你有地圖,有類型的價值
list<pair<string,LARGE_INTEGER>>
在你嘗試添加到map(作為值/ “第二個參數” )之后,只需要一對(另一個是錯誤的類型)。
( pair<DWORD,pair<string,LARGE_INTEGER>>(dwTheadID, (string("Start"), m_TimePRE)));
如果你有
map<T1, list<pair<T2,T3> > > my_map;
你應該添加到列表否則。 像這兒:
my_map[T1_object].push_back(make_pair(T2_object, T3_object)); //or
my_map[T1_object].push_back(T2_T3_pair_object);
//or in C++11
my_map[T1_object].emplace_back(T2,T3);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.