[英]How to insert to std::map which is in std::multimap?
如何将另一个 map 插入 map?
在代码中,我尝试从另一个复制 map。
multimap<string, map<size_t, size_t>> sorted;
for (auto itr = m_Items.begin(); itr != m_Items.end(); ++itr)
sorted.emplace(itr->first
, make_pair(itr->second.m_Date.m_Time, itr->second.m_Cnt)
);
假设您有m_Items
作为
struct Date {
std::size_t m_Time;
};
struct MyStruct
{
Date m_Date;
std::size_t m_Cnt;
};
std::multimap<std::string, MyStruct> m_Items;
那么你需要
for (auto itr = m_Items.begin(); itr != m_Items.end(); ++itr)
sorted.emplace(itr->first, std::map<size_t, size_t>{ {itr->second.m_Date.m_Time, itr->second.m_Cnt} });
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
您的地图的值再次是 map (即std::map<size_t, size_t>
)而不是std::par
。 因此,您需要按上述方式插入。
在c++17中,借助 结构化绑定声明和基于范围的 for 循环(自c++11起),您可以编写更直观的代码:
for (const auto& [key, value] : m_Items)
sorted.emplace(key, std::map<size_t, size_t>{ {value.m_Date.m_Time, value.m_Cnt} });
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这是一个(简短的演示。 )
但是,如果您只需要一个未排序的键值对作为sorted
中的条目,我建议
std::multimap<std::string, std::pair<size_t, size_t>> sorted;
^^^^^^^^^^^^^^^^^^^^^^^^^^
而是在那里。
要使用 emplace,您必须匹配一对 arguments。 第二个参数必须是 map。
所以这可以通过这种方式完成:
multimap<string, map<size_t, size_t>> sorted;
for (auto itr = m_Items.begin(); itr != m_Items.end(); ++itr) {
sorted.emplace(itr->first, map{make_pair(itr->second.m_Date.m_Time,
itr->second.m_Cnt)});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.