将std :: unordered_map值移动到std :: vector

时间:2018-11-12 19:15:11

标签: c++ c++11 c++17

有什么方法可以将值移动 AZ-1 AZ-2 AZ-3 ------- -------- -------- DC=DC1 DC=DC1 DC=DC1 rack=2a rack=2b rack=2c 到向量上?我可以使用所有方法来查找副本值(例如在我的示例中),而不是使用类似于unordered_map的方法。

我不想复制值,因此可以保留std::move foo的唯一性,稍后将其更改为shared_ptr

unique_ptr

在此先感谢您提供所有有用的答案。

2 个答案:

答案 0 :(得分:5)

您当然可以将<ul class="this-list"></ul>shared_ptr移到unordered_map。您需要做的就是在示例中使用vector

std::move

请记住,此操作之后,您可能想清除地图,因为它现在包含空对象。

答案 1 :(得分:4)

@SergeyA's answer在这里已经涵盖了必不可少的部分,尽管如此,我还是添加一个基于range-v3的解决方案,它显示了C ++ 20语言的一部分。

#include <range/v3/view/map.hpp>
#include <range/v3/view/move.hpp>

using namespace ranges;

/* Setup mapOfObjects... */

const std::vector<Class> someVector = mapOfObjects | view::values | view::move;

当前状态的STL也不错,但更冗长:

#include <algorithm>
#include <iterator>

std::vector<Class> someVector;

std::transform(std::move_iterator(mapOfObjects.begin()),
        std::move_iterator(mapOfObjects.end()),
        std::back_inserter(someVector),
        [](std::pair<int, Class>&& entry){ return std::move(entry.second); });