簡體   English   中英

如何插入到 std::multimap 中的 std::map?

[英]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 因此,您需要按上述方式插入。


中,借助 結構化綁定聲明基於范圍的 for 循環(自起),您可以編寫更直觀的代碼:

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)});
    }

https://godbolt.org/z/aK39haYz1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM