有什么方法可以将值移动 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
在此先感谢您提供所有有用的答案。
答案 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); });