在c++中,如何改变元素在一个向量中的位置,并对另一个不同的向量进行相同的改变
In c++, how to change the position of elements in a vector and do the same changes to an other different vector?
我有两个向量,y和T最初大小相同,它们需要像这样保持分离。我做一个循环,直到T为空,每次循环时,T的第一个元素都用于算法,然后从向量T中删除,并推入向量S(起初为空)。每个循环,向量y中的一些值都会改变,我需要对它们进行排序。我的问题是:当我对y排序时,如果y[2]和y[3]交换,我需要交换第一个循环之前位于[2]和[3]的T中的元素!
我知道这看起来很奇怪,但这是针对我的Graph项目的Dijkstra算法。如果不清楚,我理解,如果你需要,我会尽力澄清。任何建议都会对我很有帮助!非常感谢。
如果我没有记错,T实际上是一个FIFO队列。每次迭代中的第一个元素都被"从前面弹出"并放置在其他地方。
如果你正在这样做,并且想在任何时候知道T的顺序,其中包括弹出的元素,也许你根本无法将它们从T中删除。只要有一个迭代器或指向下一个要处理的节点的指针。
该节点可以被复制到S,或者如果复制成本高昂,S可能只包含指向该节点的指针。
通过这种方式,您永远不会从T中删除元素,只需继续查看下一项即可。大概最后可以把它清理干净。
对于Dijkstra算法,您通常使用二进制堆来实现优先级队列,并按到源节点的距离升序访问节点。在每次访问时,相邻距离可能会更新(放松操作),因此相应的队列元素会更改优先级(reduce-key)。
不要将距离直接用作堆元素的键,而是使用节点标识符(或指针)。但也可以使用比较函数(例如在std::make_heap和大多数STL算法中),该函数在给定两个节点标识符的情况下比较相应的距离。
通过这种方式,节点标识符会根据堆操作重新排序,并且无论何时从堆中弹出元素(具有最小距离),都可以访问给定其节点标识符的任何您喜欢的信息。
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 变量没有改变?通过向量的函数调用
- C++在不同线程中改变向量
- 在向量内更改变量的值不会改变其在向量外的值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 通过引用传递向量的值在传递的原始向量中不会改变
- 分配矩阵列标准偏差的向量正在改变其值(RcppArmadillo)
- 应该很琐碎,为什么我不能改变我的向量的值
- 一个元素不能改变的非守恒向量
- 为什么向量分配会改变分配的向量
- 提升::p tr_向量改变元素顺序
- 为什么std::sort()改变了排序向量
- 一些向量元素不会改变
- c++的共享指针向量.如果在vector外强制转换,它会改变vector中的指针吗?< / h1 >
- 使用swap vs改变指向向量的指针
- 将向量数组作为函数参数传递(值不会改变)
- 为什么我的向量中的字符串没有改变值?
- 在c++中,如何改变元素在一个向量中的位置,并对另一个不同的向量进行相同的改变