我有一个具有动态创建的自定义小部件的UI。每个自定义小部件都有两个QLineEdits,必须从其中解析用户输入。
必须在我的应用程序中读取和处理来自这些自定义小部件中每一个通过其2 QLineEdits的信息。每个CustomWidget在确定的时间内指导机器的一个特定操作,因此我试图为我的机器获得一个“待办事项列表”,如下所示:
MachineActionA : {param1, param2}
MachineActionD : {param1, param2}
MachineActionC : {param1, param2}
MachineActionA : {param1, param2}
MachineActionD : {param1, param2}其中param1和param 2是从QLineEdits读取的。
我认为这需要的是
QMap<QString, QPair<QString, QString>> map;但很快就提醒我们,这不允许在保留前一个值的同时插入多个(相同的键)。在上面的示例中,第一个"MachineActionA“的值被插入在操作"C”和"D“之间的值覆盖,因此我尝试了一种QMultiMap方法:
QMultiMap<QString, QPair<QString, QString>> multi_map;这修复了键覆盖问题,但不保留插入键的顺序。
我确信,这可以通过对容器进行相当微小的更改来解决,而不需要定制数据结构/迭代器实现或附加的索引向量/列表(我在这里看到过)。
目前,这个相当麻烦的修复方法适用于我。
QVector<QPair<QString, QPair<QString, QString>>> complicated_pair_vector但它不漂亮。
,我是否可以创建一个映射式容器类型来保持添加的元素的顺序,同时允许重复的键?
编辑:编写了两次QMap,忘记向向量中添加第二个QPair
发布于 2020-12-04 19:03:58
您的目标是拥有比O(N)更快的查找和插入时间吗?如果没有,那么您的QVector解决方案似乎工作得很好,也许只需将其作为您自己容器类的私有实现细节,为您的其余代码创建一个相当公共的API来调用它,然后使用它。
https://stackoverflow.com/questions/65024442
复制相似问题