C++ 在c++;,如何更改元素在向量中的位置,并对其他不同的向量进行相同的更改?

C++ 在c++;,如何更改元素在向量中的位置,并对其他不同的向量进行相同的更改?,c++,vector,graph,dijkstra,C++,Vector,Graph,Dijkstra,我有两个向量,y和T最初大小相同,它们需要像这样分开。我循环直到T为空,每次循环时,T的第一个元素被用于一个算法,然后从向量T中删除,并推入向量S(一开始是空的)。每个循环,向量y中的一些值都会改变,我需要对它们进行排序。我的问题是:当我排序y时,如果y[2]和y[3]交换,我需要交换T中第一个循环之前在[2]和[3]的元素 我知道这看起来很奇怪,但这是我图形项目的Dijkstra算法。如果不清楚,我会理解,如果你需要,我会尽力澄清。任何建议都会对我很有帮助!谢谢大家! 如果我没弄错的话,T实际

我有两个向量,y和T最初大小相同,它们需要像这样分开。我循环直到T为空,每次循环时,T的第一个元素被用于一个算法,然后从向量T中删除,并推入向量S(一开始是空的)。每个循环,向量y中的一些值都会改变,我需要对它们进行排序。我的问题是:当我排序y时,如果y[2]和y[3]交换,我需要交换T中第一个循环之前在[2]和[3]的元素


我知道这看起来很奇怪,但这是我图形项目的Dijkstra算法。如果不清楚,我会理解,如果你需要,我会尽力澄清。任何建议都会对我很有帮助!谢谢大家!

如果我没弄错的话,T实际上是一个FIFO队列。每一次迭代中的第一个元素都被“从前面弹出”并放置在其他地方

如果您正在这样做,并且希望随时知道T的顺序,其中包括弹出的元素,那么您可能根本无法将它们从T中删除。只要有一个指向下一个要处理的节点的迭代器或指针

该节点可以复制到S,或者如果复制成本很高,S可能只包含指向该节点的指针

这样,您就不会从T中实际删除元素,只需继续查看下一项。大概可以在最后进行清理。

对于,您通常使用a实现优先级队列,并按到源节点的距离升序访问节点。在每次就诊时,相邻距离可能会被更新(放松操作),因此相应的队列元素会更改优先级(减少按键操作)

使用节点标识符(或指针),而不是将距离直接用作堆元素的键。但也要使用一个比较函数(例如,在和大多数STL算法中),在给定两个节点标识符的情况下,比较相应的距离


这样,节点标识符将根据堆操作重新排序,并且每当您从堆中弹出一个元素(具有最小距离)时,您可以访问给定其节点标识符的任何信息。

是的,这实际上是正确的,而且非常简单。。。这会解决我的一部分问题,谢谢!:)对于C++中的算法的实现,我还有其他的问题,所以我可以稍后再回来这里寻求更多的帮助!例如,即使我没有从t中弹出元素,我仍然需要排序y,然后对t进行相同的位置更改。事实上,这个问题需要一个优先级队列。一个常见的选项是二进制堆,它基于这样一个事实:顶部元素确实被弹出(因为剩余的元素没有真正排序)。