删除向量中两个 vectors/get 个重复对象中的公共对象(不擦除)
Delete common objects in two vectors/get duplicate objects in a vector (NOT erase)
我正在使用 SDL 2 制作游戏。该游戏将具有可自定义的控件。但是,如果一个键绑定到多个 function/task,则应在所有实例中突出显示该键,以告知用户该键已被重复。我正在寻找查找重复键的最简单方法。
我的想法是将向量转换为集合并返回,使其唯一,然后从原始向量中删除所有唯一值。那么我的问题就变成了,是否有比单独删除每个对象更简单的方法从一个向量中删除它与另一个向量共有的对象? 喜欢(其中 a
和 b
是向量) a.remove(b.begin(), b.end())
?
或,是否有更简单的方法来获取向量中重复的对象?
澄清一下,我想从 [d, e, a, a, g, f, c, f, f]
得到 [a, f]
。我不要想要唯一对象的向量,[a, c, d, e, f, g]
。我也知道我可以通过向量迭代几次来做到这一点,我只想要 一种更简单的 方法,如果有的话。
如果您需要任何代码(没有太多可提供的),请告诉我,在此先感谢!
获取向量的所有重复元素是一项代价高昂的操作(您必须通过向量的所有其余部分对每个向量元素进行迭代)并且不会是 "easy" 的方法(谈论迭代)但转换成一个集合并返回似乎不是一个好的选择。
我能想到的选项:
尝试从一开始就使用集合(或映射),如果您不希望它们有序(如集合和映射),这些似乎是解决您的控件问题的好选择, 选中 unordered_map 或 unordered_set, 这将允许您无序地存储元素而不重复
如果你需要一个向量,比检查所有向量更好的选择是每次存储一个元素时检查(不会更好但至少更干净)
用vector存储一组用过的元素,每次在vector中插入任何控件,也插入set中,这样每次都可以方便的检查控件是否已经赋值(你会消耗更多的内存,但不必每次都创建一个新的集合)
可能还有其他选择,但我找不到 "perfect" 解决此问题的方法,因为这取决于您对结构的需求
我正在使用 SDL 2 制作游戏。该游戏将具有可自定义的控件。但是,如果一个键绑定到多个 function/task,则应在所有实例中突出显示该键,以告知用户该键已被重复。我正在寻找查找重复键的最简单方法。
我的想法是将向量转换为集合并返回,使其唯一,然后从原始向量中删除所有唯一值。那么我的问题就变成了,是否有比单独删除每个对象更简单的方法从一个向量中删除它与另一个向量共有的对象? 喜欢(其中 a
和 b
是向量) a.remove(b.begin(), b.end())
?
或,是否有更简单的方法来获取向量中重复的对象?
澄清一下,我想从 [d, e, a, a, g, f, c, f, f]
得到 [a, f]
。我不要想要唯一对象的向量,[a, c, d, e, f, g]
。我也知道我可以通过向量迭代几次来做到这一点,我只想要 一种更简单的 方法,如果有的话。
如果您需要任何代码(没有太多可提供的),请告诉我,在此先感谢!
获取向量的所有重复元素是一项代价高昂的操作(您必须通过向量的所有其余部分对每个向量元素进行迭代)并且不会是 "easy" 的方法(谈论迭代)但转换成一个集合并返回似乎不是一个好的选择。
我能想到的选项:
尝试从一开始就使用集合(或映射),如果您不希望它们有序(如集合和映射),这些似乎是解决您的控件问题的好选择, 选中 unordered_map 或 unordered_set, 这将允许您无序地存储元素而不重复
如果你需要一个向量,比检查所有向量更好的选择是每次存储一个元素时检查(不会更好但至少更干净)
用vector存储一组用过的元素,每次在vector中插入任何控件,也插入set中,这样每次都可以方便的检查控件是否已经赋值(你会消耗更多的内存,但不必每次都创建一个新的集合)
可能还有其他选择,但我找不到 "perfect" 解决此问题的方法,因为这取决于您对结构的需求