问候代码专家!
我正在编写一个连接的算法,例如 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 等。
首先,我考虑为 regionB、regionC 等创建结构或类。 但是,对于每个连接 A-D,某些属性(例如该连接通过的区域的厚度)是不同的。 对于一个区域,我只需要存储 3 或 4 个不同的东西。 我应该在这里考虑哪种数据结构(任何像 vector 这样的 STL 容器?)你能推荐一个吗? (将不胜感激代码片段)
要访问节点 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/