【发布时间】:2015-10-06 10:32:38
【问题描述】:
我目前正在尝试实现 A* 算法,但遇到了一个问题:
我想保留一组不同的对象,由哈希标识(我使用过 boost::hash 和家庭,但可以使用其他任何东西)并按公共 int 值排序,这些对象的成员。
目标是能够根据 O(1) 中的 int 值检索较小的对象,并以最有效的方式保证唯一性(散列似乎是实现这一目标的好方法,但我对替代方案持开放态度)。如果满足这两个条件,我不需要遍历容器。
是否有任何已经存在的实现来回答这些规范?我的假设有误吗?我应该扩展任何现有的容器吗?
编辑:
显然不清楚“基于 int 值更小”的含义。我的意思是我的对象有一个公共属性(比如说score)。对于a 和b 两个对象,a < b 当且仅当a.score < b.score。
我希望a 和b 放在一个容器中,由score 订购。如果我尝试用c.hash == a.hash 插入c,我希望插入失败。
【问题讨论】:
-
地图或多地图怎么样?它们不是 O(1),但仍然非常快。
-
这个
int值的域是什么? -
@Satus :地图按键对其内容进行排序。我的键是哈希,但是我没有根据 int 值排序。
-
@ʎǝɹɟɟɟǝſ:我不明白你的问题。这是一个启发式成本,如果能回答的话。
-
将 std::set 与自定义比较器一起使用(仅在 int 值上,或在 int 值和哈希码的对上。不清楚您是否没有重复整数值)
标签: c++ c++11 containers