如何插入到 std::multimap 中的 std::map?
How to insert to std::map which is in std::multimap?
如何在地图中插入另一张地图?
在代码中,我尝试从另一个地图复制。
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} });
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
您的地图的值再次是地图(即 std::map<size_t, size_t>
)而不是 std::par
。因此,你需要像上面那样插入。
在c++17 with the help of structured binding declaration, and with a range based for loop(since 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} });
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这是一个(short demo.)
但是,如果您只需要一个未排序的 key-value 作为对作为 sorted
中的条目,我建议使用
std::multimap<std::string, std::pair<size_t, size_t>> sorted;
^^^^^^^^^^^^^^^^^^^^^^^^^^
而不是那里。
要使用 emplace,您必须匹配参数对。第二个参数必须是地图。
所以可以这样做:
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)});
}
如何在地图中插入另一张地图?
在代码中,我尝试从另一个地图复制。
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} });
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
您的地图的值再次是地图(即 std::map<size_t, size_t>
)而不是 std::par
。因此,你需要像上面那样插入。
在c++17 with the help of structured binding declaration, and with a range based for loop(since 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} });
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这是一个(short demo.)
但是,如果您只需要一个未排序的 key-value 作为对作为 sorted
中的条目,我建议使用
std::multimap<std::string, std::pair<size_t, size_t>> sorted;
^^^^^^^^^^^^^^^^^^^^^^^^^^
而不是那里。
要使用 emplace,您必须匹配参数对。第二个参数必须是地图。
所以可以这样做:
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)});
}