我的容器是这样的:
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)));
}
答案 0 :(得分:1)
您正尝试将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]
答案 1 :(得分:1)
我的理解是你有两个这样的变量:
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”)在地图中不,则默认构造的“值“(即list<pair<string, LARGE_INTEGER>>
)在地图中由operator[]
重载创建,并返回对它的引用。
然后,在该引用上调用list::emplace_back()
,并将新的("Start", m_TimePRE)
对添加到(以前为空,自默认构造)列表中。
使用这种形式,键入的内容要少得多,但有几项操作“在引擎盖下”;相反,在第一种形式中,代码及其逻辑步骤更明确。
答案 2 :(得分:1)
map<DWORD, list<pair<string,LARGE_INTEGER>>> map_to_list_itens;
所以你有地图,其值为
list<pair<string,LARGE_INTEGER>>
在您尝试添加到地图(作为值/ “第二个参数”)之后只是一对(另一种是错误的类型)。
( 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);
有关它的更多信息,请参阅参考资料map,list。我建议从easier example开始,了解它是如何工作的,就像这里一样。