【发布时间】:2016-06-01 07:10:37
【问题描述】:
我正在使用堆数据结构(std::priority_queue 或 boost::heap::binomial_heap)以便使用 unsigned int 对项目进行排序。
struct Item { uint32_t i; };
std::priority_queue<Item> myHeap;
我将 i 的每个项目的计数器 i 提升到堆中,当我从堆中 pop() 时,因为我正在使用 i 进行排序(未在此具体显示代码示例),我除了得到最低的uint32_t。
有没有办法用堆很好地解决环绕问题?;
当i 到达2^32 时,它将返回到0。这将导致堆给我项目0,而不是0之前的所有项目。
我应该使用其他排序技术吗?
【问题讨论】:
-
为什么不使用
uint64_t? -
如果您为每个推送的项目增加
i,您真的需要优先队列吗?那普通队列不就行了吗? -
@MukulGupta uint64_t 也有同样的问题
-
@KarstenKoop 我试图在我的示例中使其更简单,但我实际上是指具有原子 uint64_t 的多线程环境
-
看来,对于您的用例,您需要一个带有自定义比较器的
bigint类。在那种情况下,它永远无法环绕。
标签: c++ algorithm sorting heap