定义向量的 unordered_map 的最佳方法

Bry*_*Fok 3 c++ vector c++11

std::unordered_map像这样定义一个在性能方面是否相同

unordered_map<int, std::vector<ClassA>>
Run Code Online (Sandbox Code Playgroud)

像这样?

unordered_map<int, std::unique_ptr<std::vector<ClassA>>>
Run Code Online (Sandbox Code Playgroud)

对于std::vector<ClassA>部分中,我使用std::move反正。

Dan*_*rey 5

鉴于unordered_map从不移动/复制其节点,它们在复杂性方面应该同样快。但请记住

std::unordered_map<int, std::vector<ClassA>>
Run Code Online (Sandbox Code Playgroud)

当你想访问向量的数据时,少了一个间接:

std::unordered_map -> [node -> std::vector] -> data
Run Code Online (Sandbox Code Playgroud)

其中内部节点可能包含向量。奥托:

std::unordered_map<int, std::unique_ptr<std::vector<ClassA>>>
Run Code Online (Sandbox Code Playgroud)

结果是

std::unordered_map -> [node -> std::unique_ptr] -> std::vector -> data
Run Code Online (Sandbox Code Playgroud)

现在该节点仅包含std::unique_ptr需要实际取消引用才能到达std::vector.