如何在地圖中插入另一張地圖?
在代碼中,我嘗試從另一個復制地圖。
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)
);
uj5u.com熱心網友回復:
假設你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在結構化系結宣告的幫助下,以及基于范圍的 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} });
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
這是一個(簡短的演示。)
但是,如果您只需要一個未排序的鍵值對作為條目 in sorted,我建議您使用
std::multimap<std::string, std::pair<size_t, size_t>> sorted;
^^^^^^^^^^^^^^^^^^^^^^^^^^
而是在那里。
uj5u.com熱心網友回復:
要使用 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)});
}
https://godbolt.org/z/aK39haYz1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/460418.html
上一篇:對于Windows本機應用程式,WSLPOSIX路徑如何轉換為UNC?
下一篇:任何人都可以提供與static_assert一起使用的符合MISRAC 的“offsetof”宏/模板/函式嗎?
