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