我正在使用堆数据结构(std::priority_queue
或boost::heap::binomial_heap
)以便使用unsigned int
对项目进行排序。
struct Item { uint32_t i; };
std::priority_queue<Item> myHeap;
我正在为我push()
到堆中的每个项目i
递增计数器,当我从堆中pop()
时,因为我使用 i
进行排序(此特定代码示例中未显示),我除了获得最低uint32_t
。
有没有办法用堆很好地解决环绕问题?
当i
到达2^32
时,它将绕回0
。这将导致堆为我提供项目0
,而不是0
之前的所有项目。
我应该使用其他排序技术吗?
你不应该直接使用uint32_t
甚至uint64_t
。
对于索引,您应该size_t
等于运算符sizeof
的类型返回。因此,如果您在x64
平台上,它会自动适应。