c++ - 是否有理由更喜欢一个变量的多个 unordered_map 而不是一个结构?

标签 c++

我有一个包含二维坐标 x 和 y 的点类(“Point”)。现在我想要一个带有字段的 2d map ,我使用了 unordered_map。

在此 map 的每个字段上,我想保存几个值(例如类型、高度等)。

我意识到我可以为此使用另一个类/结构:

struct fieldData{
  int type;
  float height;
}
unordered_map<Point, fieldData> myMap;

或者我可以为每个人准备一张无序 map :

unordered_map<Point, int> mapType;
unordered_map<Point, float> mapHeight;

我目前的推理是,单独进行的优点是访问速度会快得多,因为我只提取例如当我需要类型时的类型,而不是当我只需要类型时的类型。如果我使用结构,操作将始终在完整的数据集上运行。一个字段最终可能包含大量数据,我可能希望程序在有限的机器上运行,例如 Raspberry Pi。

但是,由于每个字段都有许多不同的变量,代码可能难以快速维护。

值得单独做还是我可以做更方便的方法?

最佳答案

当您从 std::unordered_map 中检索一个元素时,您总是得到该元素的引用,而不是该元素的拷贝。参见 here了解详情。因此,即使您的无序映射的 mapped_type 是一个非常大的结构,如果您只需要一个字段,也只会检索该单个字段。以下两个片段在运行时性能方面是等效的:

   auto it = map.find(key);
   if( it != map.end())
   {
       LargeStruct * ls = &*it;
       do_something_with(ls->small_field);
   }

和:

   auto it = map.find(key);
   if( it != map.end())
   {
       LargeStruct & ls = *it;
       do_something_with(ls.small_field);
   }

后者更符合 C++ 的习惯。

关于c++ - 是否有理由更喜欢一个变量的多个 unordered_map 而不是一个结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30600032/

相关文章:

c++ - 在 OPENGL 中计算直方图

c++ - 如何为游戏循环制作计时器?

c++ - 依赖外部库的CMake导出包

c++ - 在什么情况下将 'this' 指针传递给类方法?

C++ 问题 :After assigning value to a variable, 另一个变量改变了

c++ - C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

c++ - 我如何知道将调用哪个函数?

c++ - 嵌套 C++ vector 的重新分配

c++ - 如何使用 zlib 压缩缓冲区?

c++ - 我不明白为什么 map 会导致段错误