我正在尝试用 c++ 编写一个小四边形类(将其视为某种图)。每个节点都应该跟踪他的邻居。我必须只跟踪传出的弧线。
第一个想法是使用指针来做到这一点:
struct Node {
//....
Node * n1,n2,... nk;
};
但是,当您必须实现复制构造函数*(首先复制所有节点,然后将每个指向旧节点的指针映射到指向新节点的相对指针)时,这种方法特别痛苦。
我认为在这种情况下使用整数索引而不是指针会是一个更好的主意。
struct Node {
//....
int n1,n2,...nk;
};
这种方法常见且正确吗?如果是,哪个是将索引映射到节点的正确容器?
std::vector<Node>
可能是最有效的方法,我可以只使用向量中的索引来引用节点,但不幸的是,从图中删除节点会非常复杂(需要重新调整图中的每个引用)。
使用std::unordered_map<int,Node>
会好一点,但它仍然需要跟踪空闲名称(如果我插入节点 1、2、3 然后删除 2,我需要跟踪名称 2 可用的事实)。
我需要的和堆的实现很相似。想想一个池分配器,它使用从其基址的偏移量作为指针类型。
有没有像这样的流行容器(在 Boost 或任何其他流行的库中)?
*它的用处不限于复制构造函数,例如考虑序列化