c++ - 将 std::unordered_map 值移动到 std::vector
问题描述
有没有办法将 unordered_map
值移动到向量?我能够找到复制值的所有方式(如在我的示例中)而不是使用类似于std::move
.
我不想复制值,所以我可以保留shared_ptr
foo 的唯一性,稍后我将其更改为unique_ptr
.
class Class {
public:
std::shared_ptr <int> foo = std::shared_ptr <int> (new int (5));
};
int main() {
std::unordered_map <int, Class> mapOfObjects({
{1, Class()},
{2, Class()},
{3, Class()},
{4, Class()},
{5, Class()} });
std::vector <Class> someVector;
for (auto &object : mapOfObjects) {
someVector.push_back(object.second);
std::cout << "Is unique? " << ( someVector.back().foo.unique() ? "Yes." : "No.")
<< std::endl << std::endl;
}
}
预先感谢您提供所有有用的答案。
解决方案
你当然可以shared_ptr
从unordered_map
到vector
。您需要做的就是std::move
在您的示例中使用:
someVector.push_back(std::move(object.second));
请记住,在此操作之后,您可能想要清除地图,因为它现在包含空对象。
推荐阅读
- node.js - Nodejs分页
- python - 为什么“import docx”在 Python 中不起作用?
- python - 查找重新排列的具有相同值的列
- python - 板球跟踪问题
- html - 调整模型 Materialize CSS 到内容
- javascript - 如何使用 Vue 检索 ApexCharts 图表的状态?
- javascript - 向nodejs提交表格
- firebase - 如何在 Firebase 和 Flutter 上对注册用户进行分类
- android - 接收端Android的通话录音声音很低
- java - How to make one character follow the main character path? LIBGDX / JAVA