c++ - 将 std::unordered_map 值移动到 std::vector

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

有没有什么方法可以移动 unordered_map 值到 vector ?我能够找到复制值的所有方法(就像在我的示例中一样),而不是使用类似于 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_ptrunordered_map 移动到 vector。您需要做的就是在示例中使用 std::move:

someVector.push_back(std::move(object.second));

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

关于c++ - 将 std::unordered_map 值移动到 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53268662/

相关文章:

c++ - 为什么允许从 pair<int64_t,int64_t> 到 pair<int,int> 的隐式转换?

c++ - 有没有用 C++11 中基于范围的 for 循环替换 BOOST_FOREACH 的经验?

c++ - 变体访问和 common_type

c++ - 声明 int 数组

c++ - 模板类 + 委托(delegate)构造函数 = 字段未初始化? ( clang )

c++ - 为什么 clang 不使用 NRVO 对此进行优化?

c++ - 具有部分固定类型的递归数据类型

c++ - 将 std::vector<std::byte> 分配给 std::vector<char> 而不复制内存

c++ - b=a->b 在一类列表中是什么意思?

java - 通过套接字传输文件时文件损坏