gpt4 book ai didi

c++ - 删除两个 vector 中的公共(public)对象/获取 vector 中的重复对象(不删除)

转载 作者:行者123 更新时间:2023-11-28 06:16:05 34 4
gpt4 key购买 nike

我正在使用 SDL 2 制作游戏。该游戏将具有可自定义的控件。但是,如果一个键绑定(bind)到多个功能/任务,则应在所有情况下突出显示该键,以告知用户该键已被重复。我正在寻找查找重复键的最简单方法。

我的想法是将 vector 转换成一个集合并返回,使其唯一,然后从原始 vector 中删除所有唯一值。那么我的问题就变成了,是否有比单独删除每个对象更简单的方法来从一个 vector 中删除它与另一个 vector 共有的对象? 像(其中 ab 是 vector ) a.remove(b.begin(), b.end())?

或者,是否有更简单的方法来获取 vector 中重复的对象?

澄清一下,我想从 [d, e, a, a, g, f, c, f, f] 得到 [a, f] .我想要唯一对象的 vector ,[a, c, d, e, f, g]。我也知道我可以通过多次迭代 vector 来做到这一点,我只是想要一种更简单的方法,如果有的话。

如果您需要任何代码(没有太多可提供的),请告诉我,在此先感谢您!

最佳答案

获取 vector 的所有重复元素是一项代价高昂的操作(您必须通过 vector 的所有其余部分对每个 vector 元素进行迭代)并且不是一种“简单”的方法(谈论迭代) ) 但转换成一个集合并返回似乎不是一个好的选择。

我能想到的方案:

  1. 尝试从一开始就使用集合(或映射),对于您的控件问题,这些似乎是不错的选择,如果您不希望它们有序(如集合和映射),请检查 unordered_map 或unordered_set,这将允许您无序地存储元素而不会重复

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

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

可能还有其他选择,但我找不到解决这个问题的“完美”方法,因为这取决于您对结构的需求

关于c++ - 删除两个 vector 中的公共(public)对象/获取 vector 中的重复对象(不删除),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30281546/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com