图表与订购

时间:2014-12-05 14:30:49

标签: c++ graph stl

我正在尝试用c ++代码解决这个问题,我想要没有固定解决方案(作为提升)。

定义了这个---无向连接。假设有一个未确定维度的图表及其索引,存储在容器中:

 1 - Obj1 
 2 - Obj2
 3 - Obj3
 4 - Obj4
 5 - Obj5
 ...

现在假设:

   1 --- 5
   2 --- 3  
   4 --- 2
   ...

现在我们选择删除3 - Obj 3,我想要:

1 - Obj1
2 - Obj2
3 - Obj4
4 - Obj5
...

1 --- 4  
3 --- 2
...

我还想通过索引访问这些对象。 我试图找到一个解决方案,但我不能。

我需要更多地处理这些元素:首先添加它们,将它们的属性存储在对象中,同样用于连接,没有任何成本。在我需要删除其中一些保留引用之后。

哪个是最简单,最有效的可能实现,关于使用STL的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果你想保持简单,只需使用矢量作为顶点。 V是您的顶点类型。

std::vector<V> vertex;
vertex.push(Obj1);
vertex.push(Obj2);
vertex.push(Obj3);
vertex.push(Obj4);
vertex.push(Obj5);

您可以通过调用

删除顶点
vertex.erase(vertex.begin()+2); //delete the third entry

之后vertex[2]Obj4而不是Obj3

图表的边缘有点复杂。您可以构建一个邻接列表,它基本上是一个二维向量。

std::vector<std::vector<V> > adjacency_list;

如果删除{{1>,则必须确保删除i的每一个i行,并将所有大于i的条目减少一个顶点。