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