我正在开发一个演示Djikstra算法的应用程序,并且要使用它,我需要在我的元素值减少时恢复堆属性.
关于复杂的问题是,当算法改变的元素的值,该元素的索引用于优先级队列中的内部结构(堆在这种情况下)是未知的.因此,我之前需要进行O(n)搜索,以便恢复索引,然后才能对其执行实际的减少键.
而且,我不确定操作所需的实际代码.我在这里使用D-Heap 作为我的优先级队列.伪代码会有所帮助,但我更喜欢Java中的一个例子,说明应该如何做.
在我的头文件中,我已经包含了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中)