我正在使用SDL 2制作游戏。这款游戏将具有可自定义的控件。但是,如果一个键绑定到多个函数/任务,则应在所有实例中突出显示该键,以通知用户该键已被重复。我正在寻找最简单的方法来查找重复的密钥。
我的想法是将矢量转换为集合并返回,使其唯一,然后从原始矢量中删除所有唯一值。我的问题就变成了,是否有一种更简单的方法可以从一个与另一个向量共有的向量中删除它而不是单独删除每个对象? Like(a
和{{1}是矢量)b
?
OR ,是否有更简单的方法来获取向量中重复的对象?
为了澄清,我想从a.remove(b.begin(), b.end())
获得[a, f]
。我 不要 想要唯一对象的向量[d, e, a, a, g, f, c, f, f]
。我也知道我可以通过迭代向量几次来做到这一点,我只想要一种更简单的方式,如果有的话。
如果您需要任何代码(请不要提供任何代码),请告诉我们,并提前致谢!
答案 0 :(得分:1)
获取向量的所有重复元素是一项代价高昂的操作(您必须通过向量的所有其余部分迭代每个向量元素)并且不会是一种“简单”的方法(讨论迭代)但是转变成一套又一套并不是一个好的选择。
我能想到的选择:
尝试从头开始使用一个集合(或地图),这些似乎是关于控件问题的好选项,如果你不想对它们进行排序(如set和map所示),请检查unordered_map或unordered_set,它允许您存储无序重复的元素
如果你需要一个向量,每次存储一个元素时检查一个比检查所有向量更好的选项(不会更好,但至少更干净)
使用向量存储一组已使用的元素,每次在向量中插入任何控件时,也会插入到集合中,这样每次都可以轻松检查控件是否已分配(您将消耗)更多内存,但不必每次都创建一个新的集合)
可能还有其他选择,但我无法找到解决这个问题的“完美”方法,因为这取决于您对结构的需求