繁体   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