有向图和无向图的数据结构至关重要。Boost Graph Library和Lemon等知名且广泛使用的实现的设计使得节点和边的连续整数索引不会通过接口暴露给用户。
相反,用户通过(小)代表对象来识别节点和边。一个优点是,当节点和边的索引由于从图中删除边或节点而发生变化时,这些对象会自动更新。
在我看来(!),这个优势被高估了。用户通常会将节点和/或边的代表对象存储在容器中,例如std::vector
. 现在,如果从图中删除节点或边并且它们的代表对象变得无效,则用户需要忽略这一点或重新排列向量以保持有效的整数索引连续,即完全按照设计应该做的簿记使不必要的。
因此,我的问题是:设计选择(对用户隐藏节点和边的连续整数索引)是否有其他优势?