小编jat*_*iou的帖子

如何为基于最小堆的优先级队列实现O(logn)减少键操作?

我正在开发一个演示Djikstra算法的应用程序,并且要使用它,我需要在我的元素值减少时恢复堆属性.

关于复杂的问题是,当算法改变的元素的值,该元素的索引用于优先级队列中的内部结构(堆在这种情况下)是未知的.因此,我之前需要进行O(n)搜索,以便恢复索引,然后才能对其执行实际的减少键.

而且,我不确定操作所需的实际代码.我在这里使用D-Heap 作为我的优先级队列.伪代码会有所帮助,但我更喜欢Java中的一个例子,说明应该如何做.

algorithm heap priority-queue decrease-key

48
推荐指数
2
解决办法
4万
查看次数

使用map迭代器编译错误

在我的头文件中,我已经包含了std :: map并使用了相应的命名空间.
我的一位成员是:

map<unsigned int, double> pT_Spam;
Run Code Online (Sandbox Code Playgroud)

在我的.cpp文件中,我尝试做一些我经常做一段时间的事情:

for(map<unsigned int, double>::iterator it=pT_Spam.begin() ; it!=pT_Spam.end() ; it++) {/*code*/}
Run Code Online (Sandbox Code Playgroud)

在cplusplus.com上使用std :: map的例子中甚至提到了上述内容.即使我在代码的其他部分中完成了相同的操作,导致没有编译错误,但在这个特定的行上,我从Cygwin得到以下错误:

error: conversion from `std::_Rb_tree_const_iterator<std::pair<const unsigned int, double> >' to non-scalar type `std::_Rb_tree_iterator<std::pair<const unsigned int, double> >' requested
Run Code Online (Sandbox Code Playgroud)

这似乎很奇怪.知道什么可能是错的吗?(我的标题当然包含在我的.cpp中)

c++ iterator compiler-errors map

8
推荐指数
1
解决办法
9127
查看次数