首页 > 解决方案 > 将 std::unordered_map 值移动到 std::vector

问题描述

有没有办法 unordered_map值移动到向量?我能够找到复制值的所有方式(如在我的示例中)而不是使用类似于std::move.

我不想复制值,所以我可以保留shared_ptrfoo 的唯一性,稍后我将其更改为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;
    }  
}

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

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

解决方案


你当然可以shared_ptrunordered_mapvector。您需要做的就是std::move在您的示例中使用:

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

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


推荐阅读