删除两个向量中的公共对象/在一个向量中获取重复对象(不是擦除)

Delete common objects in two vectors/get duplicate objects in a vector (NOT erase)

本文关键字:向量 获取 对象 一个 擦除 两个 公共对象 删除      更新时间:2023-10-16

我正在使用SDL 2制作一款游戏。这个游戏将有可定制的控制。但是,如果一个键绑定到多个函数/任务,则应该在所有实例中突出显示该键,以通知用户该键已被重复使用。我正在寻找最简单的方法来找到重复的密钥。

我的想法是将向量转换成一个集合并返回,使其唯一,然后从原始向量中删除所有唯一值。我的问题就变成了,有没有一种更简单的方法来从一个向量中删除它与另一个向量有共同之处,而不是单独删除每个对象? Like(其中ab为向量)a.remove(b.begin(), b.end()) ?

,是否有更简单的方法来获得在向量中复制的对象?

只是为了澄清,我想从[d, e, a, a, g, f, c, f, f]得到[a, f]。I DO NOT想要唯一对象的向量,[a, c, d, e, f, g]。我也知道我可以通过对向量迭代几次来做到这一点,我只是想用一种更简单的方法,如果有的话。

让我知道如果你需要任何代码(没有太多给),并提前感谢!

获取vector中所有重复的元素是一个代价高昂的操作(你必须遍历vector中所有其他元素的每个vector元素),并且不会是一个"简单"的方法(讨论迭代),但转换成一个集合并返回似乎不是一个好选择。

我能想到的选项:

  1. 从一开始就尝试使用set(或map),这些似乎是解决您的控制问题的好选择,如果您不希望它们有序(如set和map),请检查unordered_map或unordered_set,这将允许您存储无序元素而不重复

  2. 如果你需要一个vector,一个比检查所有vector更好的选择是每次存储元素时检查(不会更好,但至少更干净)

  3. 用vector存储一组已使用的元素,每次在vector中插入任何控件时,也插入该集合,这样每次都可以轻松检查控件是否已被分配(您将消耗更多内存,但不必每次都创建一个新集合)

可能有其他选择,但我找不到"完美"的方法来解决这个问题,因为这取决于你如何需要你的结构