簡體   English   中英

如何在地圖到列表對中插入值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM