gpt4 book ai didi

c++ - priority_queue<> 比较指针?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:52 26 4
gpt4 key购买 nike

所以我将 STL priority_queue<> 与指针一起使用...我不想使用值类型,因为创建一堆仅用于优先级队列的新对象将非常浪费。所以...我正在尝试这样做:

class Int {
public:
Int(int val) : m_val(val) {}
int getVal() { return m_val; }
private:
int m_val;
}


priority_queue<Int*> myQ;

myQ.push(new Int(5));
myQ.push(new Int(6));
myQ.push(new Int(3));

现在我如何编写一个比较函数来让那些在 Q 中正确排序?或者,有人可以建议替代策略吗?我真的需要 priority_queue 接口(interface)并且不想使用复制构造函数(因为有大量数据)。谢谢

编辑: Int 只是一个占位符/示例...我知道我可以在 C/C++ 中使用 int 哈哈...

最佳答案

您可以明确指定您的队列应该使用哪个比较器。

#include <iostream>
#include <sstream>
#include <functional>
#include <vector>
#include <queue>

class Int {
public:
Int(int val) : m_val(val) {}
int getVal() { return m_val; }
bool operator<(const Int &other) const { return m_val < other.m_val; }
private:
int m_val;
};

template<typename Type, typename Compare = std::less<Type> >
struct pless : public std::binary_function<Type *, Type *, bool> {
bool operator()(const Type *x, const Type *y) const
{ return Compare()(*x, *y); }
};

int main(int argc, char *argv[]) {
std::priority_queue<Int*, std::vector<Int*>, pless<Int> > myQ;

for (int i = 1; i < argc; i++) {
std::stringstream ss(argv[i]);
int x;
ss >> x;
myQ.push(new Int(x));
}

for (; !myQ.empty(); delete myQ.top(), myQ.pop())
std::cout << myQ.top()->getVal() << std::endl;

return 0;
}

关于c++ - priority_queue<> 比较指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1517854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com