c++ - 在 key 之外的其他东西上订购容器

标签 c++ c++11 containers

我目前正在尝试实现 A* 算法,但遇到了一个问题:

我想保留一组不同的对象,由散列标识(我使用了 boost::hash 和系列,但可以使用其他任何东西)并按公共(public) int 值排序,这些对象的成员。

目标是能够根据 O(1) 中的 int 值检索较小的对象,并以最有效的方式保证唯一性(散列似乎是实现该目标的好方法,但我对替代方案持开放态度)。如果满足这两个条件,我就不需要遍历容器。

是否有满足这些规范的现有实现?我的假设有误吗?我应该只扩展任何现有容器吗?

编辑:

显然不清楚“基于 int 值的更小”是什么意思。我的意思是我的对象有一个公共(public)属性(比方说 score )。对于两个对象 ab , a < b当且仅当 a.score < b.score .

我要ab装在容器中,由 score 订购.如果我尝试插入 cc.hash == a.hash , 我希望插入失败。

最佳答案

虽然std::priority_queue是一个适配器,但是它的Container模板参数必须满足SequenceContainer,所以不能构建一个backed通过 std::set

看起来你最好的选择是同时维护一个集合和一个优先级队列,并使用前者来控制插入后者。将它封装到一个容器概念类中可能是个好主意,但如果您对它的使用非常本地化,您可能会使用一些方法。

关于c++ - 在 key 之外的其他东西上订购容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32967751/

相关文章:

具有多个网络接口(interface)的 Docker 容器 : get only one IP address

c++ - 使用 sfinae 在 clase 模板中选择不同的方法实现

Git LFS 给 x509 : certificate signed by unknown authority

c++ - 如何创建一个程序以用单个空白/选项卡替换多个空白/选项卡?

c++ - 为什么在 ubuntu 上的 netbeans 中找不到 std::pair

c++ - 将范围拆分为子范围

c++ - 与普通互斥锁相比,唯一锁如何工作?

containers - 容器和包装器的区别

c++ - 通过函数修改数组元素

c++ - 将字符串相关函数从 C++ 转换为 C