【发布时间】:2015-07-21 17:00:31
【问题描述】:
(之前提到的)STL Priority Queue on custom class
这听起来可能过于复杂,但我正在尝试创建一个自定义类的 std::pair 和一个 enum availability 类型的二维数组。
这是队列的声明:
std::priority_queue < std::pair<Panel_string, availability**>*, std::vector<std::pair<Panel_string, availability**>*>, compareString > queue_string;
这是队列的比较函数(每对将根据其权重排序):
struct compareString {
bool operator() (const std::pair<Panel_string, availability**>* left, const std::pair<Panel_string, availability**>* right) const {
return left->first->weight > right->first->weight;
}
};
关于 this 的语法,我参考了上面的链接。
但是,我无法编译它,因为在 compareString 结构中只检测到两个错误。在 Visual Studio 中,“左”和“右”出现两条红线(struct compareString 的第 3 行),均警告:
IntelliSense: expression must have pointer type.
如果你是我要找的专家,请帮助我):
【问题讨论】:
-
那不是成对的队列。它是一个指针队列。但是为什么所有的指针呢?
-
双指针 (
availability**) 可以像二维数组一样使用,但在语义上有些不同,因为不能保证所有行/列的长度都相同(可能是一个“锯齿状阵列”)。动态二维数组可能最好使用单个指针 (availability*) 来计算索引(类似于i * rows + j)。
标签: c++ priority-queue