删除两个向量中的公共对象/在一个向量中获取重复对象(不是擦除)
Delete common objects in two vectors/get duplicate objects in a vector (NOT erase)
我正在使用SDL 2制作一款游戏。这个游戏将有可定制的控制。但是,如果一个键绑定到多个函数/任务,则应该在所有实例中突出显示该键,以通知用户该键已被重复使用。我正在寻找最简单的方法来找到重复的密钥。
我的想法是将向量转换成一个集合并返回,使其唯一,然后从原始向量中删除所有唯一值。我的问题就变成了,有没有一种更简单的方法来从一个向量中删除它与另一个向量有共同之处,而不是单独删除每个对象? Like(其中a
和b
为向量)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元素),并且不会是一个"简单"的方法(讨论迭代),但转换成一个集合并返回似乎不是一个好选择。
我能想到的选项:
-
从一开始就尝试使用set(或map),这些似乎是解决您的控制问题的好选择,如果您不希望它们有序(如set和map),请检查unordered_map或unordered_set,这将允许您存储无序元素而不重复
-
如果你需要一个vector,一个比检查所有vector更好的选择是每次存储元素时检查(不会更好,但至少更干净)
-
用vector存储一组已使用的元素,每次在vector中插入任何控件时,也插入该集合,这样每次都可以轻松检查控件是否已被分配(您将消耗更多内存,但不必每次都创建一个新集合)
可能有其他选择,但我找不到"完美"的方法来解决这个问题,因为这取决于你如何需要你的结构
- 获取向量C++中第一个值和最后一个值的和
- 如何从用户那里获取输入并将其存储在向量中?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++获取传递给函数的向量的名称
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 如何从C++的对的排序向量中获取有关给定值的相应对
- push_back通过自行创建的对象获取最后一个元素的向量
- 从自定义类获取对象向量中的 max 元素
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 沿向量获取点
- 如何在指定数据之间将数据从一个向量获取到另一个向量
- 从向量获取值
- 通过函数参数从向量获取类指针
- C++:从向量<向量获取 T**<T>>
- 从 std::map 中的向量获取数据
- 从节点数组和边缘向量获取所有子树的最有效方法是什么
- C++在尝试编写对象读取器时,在尝试从一个向量获取数据时出错
- C++:向量获取意外数据
- 无法从另一个向量内的向量获取数据
- 如何从 unique_ptr 向量获取派生迭代器<Base>?