gpt4 book ai didi

c++ - 在 std::map 的值上使用非 ptr 是一个好习惯

转载 作者:行者123 更新时间:2023-11-30 05:39:28 27 4
gpt4 key购买 nike

我想定义一个 map std::unordered_map<int, std::unordered_set<int>>或者 std::unordered_map<int, std::unique_ptr<std::unordered_set<int>>>

我不确定哪个更好。

我看不出第一个有没有问题。在Does std::map::iterator return a copy of value or a value itself?方面第一个是安全的,因为每组映射的访问也应该是引用类型。

如果是这样,哪个更好?

最佳答案

我更喜欢 std::unordered_map<int, std::unordered_set<int>> .大多数 C++ 容器由一种“头”数据结构组成,包含指向实际数据的指针(例如,std::vector 只是一个包含一些指向实际底层“数组”数据的指针的类)。这种“ header ”数据结构通常相对较小,因此如果您要存储 std::unique_ptr对它来说,内存分配的实际开销(包括CPU时间开销和内存开销)会比较大。

另一方面,如果您的问题需要您有效地查看 std::unordered_map 中的条目是“空的”,和/或你会在 map 中有很多这样的空条目,使用 std::unique_ptr可能会更有效率。

另请注意容器,如 std::setstd::map有比较大的内存开销。考虑使用 std:vector而不是 std::set如果集合只包含几个元素。循环一个小 vector 来检查重复项可能比使用 std::set 的哈希逻辑更有效。 (因为 std::vector 的内存位置将更有效地使用处理器内存缓存,请参阅 Chandler Carruth 在 CPPCON2014 上的演示,https://www.youtube.com/watch?v=fHNmRkzxHWs)。

关于c++ - 在 std::map 的值上使用非 ptr 是一个好习惯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32343037/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com