c++ - 在这种情况下要考虑的有效 C++ 数据结构

标签 c++ data-structures stl

问候代码专家!

我正在编写一个连接的算法,例如 Region_A 的 node_A 与 Region_D 的 node_D。 (node_A 和 node_D 只是整数)。可能有 100k+ 这样的节点。

假设 A 和 D 之间的线段穿过多个其他区域 B, C, Z 。这两个节点之间最多有 20 个区域。

每个区域都有自己的属性,这些属性可能会根据连接 A-D 的不同而有所不同。我想稍后访问这些。

我正在寻找一个好的数据结构(可能是一个 STL 容器)来保存特定连接的此信息。

例如,对于连接 A - D 我要存储:

node_A, 
node_D, 
crosssectional area (computed elsewhere) , 
regionB, 
regionB_thickness, 
regionB other properties, 
regionC, ....

数据可以是 double 、 int 、 string 也可以是数组/vector 等。

  1. 首先,我考虑为 regionB、regionC 等创建结构或类。 但是,对于每个连接 A-D,某些属性(例如该连接通过的区域的厚度)是不同的。 对于一个区域,我只需要存储 3 或 4 个不同的东西。 我应该在这里考虑哪种数据结构(任何像 vector 这样的 STL 容器?)你能推荐一个吗? (将不胜感激代码片段)

  2. 要访问节点 A-D 之间的连接,我想使用 int node_A(索引)。 这可能意味着我需要使用 HashMap 或类似的数据结构。 任何人都可以在 C++ 中推荐一个可以有效地工作的良好数据结构吗? 为上述连接 A -D 保存此类数据? (将不胜感激代码片段)

谢谢!

更新 由于某些原因,我无法使用像 boost 这样的 pkgs。所以想知道我是否可以使用来自 STL 的任何库

最佳答案

如果可以,您应该尝试将内容组合在一起。您可以将每个区域的信息与以下内容组合在一起:

class Region_Info {
  Region *ptr;
  int thickness;
  // Put other properties here.
};

然后,您可以更轻松地为线段创建数据结构,可能类似于以下内容:

class Line_Segment {
  int node_A;
  int node_D;
  int crosssectional_area;
  std::list<Region_Info>;
};

如果您仅限于 20 个区域,那么列表应该可以正常工作。如果您愿意,也可以使用 vector 。

关于c++ - 在这种情况下要考虑的有效 C++ 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2175445/

相关文章:

c++ - 一道C++语法问题

c++ - Winsock教程错误

c++ - 在循环内检查 std::vector 大小的正确方法

C++ 帮助 STL - sort() 函数

c++ - stringstream->rdbuf()->pubsetbuf 没有设置缓冲区

c++ - 如何从 QSS 选择 QTextBrowser 中的 href 标签?

c++ - ISO C++ 标准 - 关于检查依赖库的规则。为什么?

memory - RAM内存中的链表

c++ - 为什么我不能为指向 null 的指针设置数据值

c++ - Rabin-Karp 算法代码中的负哈希值