C++ 将一种类型映射到另一种类型以与自己的算法一起使用

C++ 将一种类型映射到另一种类型以与自己的算法一起使用,c++,algorithm,qt,c++14,C++,Algorithm,Qt,C++14,我目前正在一个做计算几何的库中工作。为了可视化我的算法的结果(并在交互设置中使用它们),我决定在Qt中编写一个小小的查看器/工具,但将核心逻辑与该查看器分开。现在我有了一个qgraphicscene,它包含了一系列不同的项目,然而,我只对QGraphicsRectItems感兴趣: for(auto* item : scene) { if(QGraphicsRectItem* c = qgraphicsitem_cast<QGraphicsRectItem*>(item))

我目前正在一个做计算几何的库中工作。为了可视化我的算法的结果(并在交互设置中使用它们),我决定在
Qt
中编写一个小小的查看器/工具,但将核心逻辑与该查看器分开。现在我有了一个
qgraphicscene
,它包含了一系列不同的项目,然而,我只对
QGraphicsRectItems
感兴趣:

for(auto* item : scene) {
    if(QGraphicsRectItem* c = qgraphicsitem_cast<QGraphicsRectItem*>(item)) {
        // ... do stuff
    }
}
以及对它们起作用的算法。想象一下我有一个方法

void layout(std::vector<rectangle>& rs) { ... }
void布局(std::vector&rs){…}
它取一组任意定位的
矩形
,并将它们彼此相邻放置

现在,我想将此算法用于场景中的
QGraphicsRectItems
。你会怎么做?我在想,我可以将
QGraphicsItems
转换为
矩形
,将矩形存储在向量中,并使用
std::unordered_map
跟踪它们属于哪个项目。处理完
矩形后
我可以迭代向量,并将更改应用于场景中的项目


这是路吗?你将如何解决这个问题?也许我的设计从一开始就有缺陷?

如果场景具有稳定的顺序,并且布局编辑条目而不“重新排序”,则在场景中迭代

使用push back将矩形填充到场景中每个元素的向量中

做布局

反转向量

迭代场景,在每个场景元素的向量末尾弹出新位置

您可能会弄乱指针或索引,但上面的操作就像一个单通道队列,可以正常工作

从具有以下内容的场景开始:

qA qB qC qD qE qF qG
然后我们创建一个矩形向量:

rA rB rC rD rE rF rG
我们将其处理为小写:

ra rb rc rd re rf rg
然后反过来:

rg rf re rd rc rb ra
现在我们迭代qt场景和pop:

current | stack [top of stack]
qA:ra   | rg rf re rd rc rb [ra]
qB:rb   | rg rf re rd rc [rb]
qC:rc   | rg rf re rd [rc]

等等。

布局
只是更改了值,还是移动了矩形索引?谢谢你的回答。不幸的是,并不是所有的算法都是稳定的。我应该从一开始就提到。@j.dog那么你的问题就不能像前面描述的那样得到解决:指向向量中元素的指针也不稳定。增加你的布局功能来追踪身份。当然,现在我觉得自己很愚蠢。谢谢你指出这一点。
current | stack [top of stack]
qA:ra   | rg rf re rd rc rb [ra]
qB:rb   | rg rf re rd rc [rb]
qC:rc   | rg rf re rd [rc]