C++ 堆数据结构中的环绕问题

C++ 堆数据结构中的环绕问题,c++,algorithm,sorting,heap,C++,Algorithm,Sorting,Heap,我正在使用堆数据结构(std::priority\u queue或boost::heap::binomial\u heap)来使用无符号int对项目进行排序 struct Item { uint32_t i; }; std::priority_queue<Item> myHeap; struct Item{uint32\u t i;}; std::优先级队列myHeap; 我正在为每个项目提升计数器I,我将push()放入堆中,当我从堆中pop()时,因为我正在使用I进行排序(在

我正在使用堆数据结构(
std::priority\u queue
boost::heap::binomial\u heap
)来使用
无符号int对项目进行排序

struct Item { uint32_t i; };
std::priority_queue<Item> myHeap;
struct Item{uint32\u t i;};
std::优先级队列myHeap;
我正在为每个项目提升计数器
I
,我将
push()
放入堆中,当我从堆中
pop()
时,因为我正在使用
I
进行排序(在这个特定的代码示例中没有显示),除了获得最低的
uint32\t

有没有一种方法可以很好地解决堆的环绕问题

i
到达
2^32
时,它将返回到
0
。这将导致堆给我项
0
,而不是
0
之前的所有项


我应该使用其他排序技术吗?

您不应该直接使用
uint32\u t
甚至
uint64\u t


对于索引,您应该
size\u t
,它等于运算符
sizeof
返回的类型。因此,如果您在
x64
平台上,它将自动适应。

为什么不使用
uint64\u t
?如果您为推送的每个项目增加
i
,您真的需要优先级队列吗?那么,正常的队列不就可以了吗?@MukulGupta uint64也有同样的问题_t@KarstenKoop在我的示例中,我试图使其更简单,但实际上我的意思是,对于带有原子uint64的多线程env,似乎对于您的用例,您需要一个带有自定义比较器的
bigint
类。在这种情况下,它永远无法缠绕。