我正在尝试用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的任何想法?
谢谢!
答案 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
的条目减少一个顶点。