对于我的游戏,当一个物体进入传感器时,我需要将它添加到一个列表中,当物体离开传感器时,需要从该列表中删除它。我还需要能够快速找到该对象。
基本上是这样的:
我需要这样做: 快速添加,快速删除和快速查找。
什么样的数据结构最适合这种情况,因为在任何给定的时间,结构将有大约10个对象。
由于
答案 0 :(得分:9)
有10个对象可以执行任何操作(std::vector
,deque
或set
),并且在分析之前没有人能够确定哪个对象表现得更好。
如果你不知道该使用什么,也许你会发现std::set
有一个更好的语法来查找元素。这就是我在这种情况下会使用的,因为我不想写std::find(v.begin(), v.end(), sensor)
我只能写s.find(sensor)
。
不要使用std::list
作为一般建议。你需要一个令人信服的理由在C ++中使用链表(常量时间拼接是一个,没有迭代器失效是另一个)。其他数据结构对大多数操作(拼接除外)表现更好。在这里,我没有看到使用list
而不是例如。 set
。
答案 1 :(得分:1)
我建议std::list
因为它完全适合插入和删除元素。
答案 2 :(得分:0)
快速添加,快速删除和快速查找,您不需要太多!鉴于你说的我会说链表,但它也取决于添加,删除和发现的频率。如果您发现的频率远高于添加或删除内容的更改。
真正唯一的方法是尝试一些不同的选择并计算时间。
答案 3 :(得分:0)
我认为链接列表最好。鉴于规模较小,转移指针的行为不会影响性能。