我有两个使用不同比较器的不同优先级队列。我想用一个布尔值的if / else来确定哪个p.q.将被设置为变量(例如,“pq”);
例如我有
priority_queue<test, vector<test>, CompareTest1> pq;
如何将其放在if / else中,如果布尔值被标记,则pq将被设置为...
priority_queue<test, vector<test>, CompareTest2> pq;
使用不同的比较器。感谢。
答案 0 :(得分:2)
这是不可能的,因为如果给出不同的模板参数,则两个模板是不同的类型。我的建议是传递一个具有布尔值的比较函子,该布尔值由if语句中的任何内容确定。例如:
struct compare {
bool b;
//set this instead of the if statement and allow the function to do something different
operator () (const test & lhs, const test & rhs) {
}
};
答案 1 :(得分:0)
优先级队列的结构不允许您查找的内容 - 元素根据其比较器在优先级队列中排序。使用不同的比较器创建优先级队列等同于创建全新的优先级队列。