我的理解是,你有两个变量是这样的:
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吗? –