如何将 Java 优先级队列转换为 C++ 优先级队列
how to convert java priority queue to c++ priority queue?
我正在将Java代码重写为C++代码,并且在复制Java的优先级队列时遇到问题。
Java 优先级队列的比较函数如下所示:
public int compareTo(Item that) {
if (this.dist < that.dist)
return -1;
if (this.dist > that.dist)
return 1;
return 0;
}
我在C++中做了一个比较函数,但它无法正常工作:
struct cmp
{
bool operator()(Item it1, Item it2)
{
if(it1.dist > it2.dist)
return true;
}
};
这是我的C ++代码优先级队列
我这样称呼优先级队列
priority_queue<Item, vector<Item>, cmp> que;
但是,Java的顺序和C++的顺序是不同的。
请帮帮我
如果这还不够示例代码,我可以提供我的整个代码。Java 和 C++ code
将比较运算符定义为
struct cmp
{
bool operator()(const Item & it1, const Item & it2) // pass by a const reference
{
return it1.dist > it2.dist;
}
};
您也可以将其定义为自由函数。
struct cmp
{
bool operator()(Item it1, Item it2)
{
if(it1.dist > it2.dist)
return true;
}
};
理想情况下,if
检查应反转:
if ( it1.dist < it2.dist)
由于priority_queue
期望等同于std::less
的东西.
此外,您可以简单地return
:
bool operator()(Item it1, Item it2)
{
return it1.dist < it2.dist;
}
重要的是,理想情况下,Item
参数必须是const
和附带引用的:
bool operator()(const Item& it1, const Item& it2)
{
return it1.dist < it2.dist;
}
如果您使用的是 C++11 或更高版本的编译器(我认为),您可以简单地使用 lambda 而不是定义operator()
struct
。看到这个答案
似乎
您没有在 cmp 中设置"返回 false"的条件C++
struct cmp
{
bool operator()(Item it1, Item it2)
{
if(it1.dist > it2.dist)
return true;
else
return false
}
};
您需要
修复返回的值:
struct cmp
{
bool operator()(Item it1, Item it2)
{
return (it1.dist > it2.dist)
}
};
相关文章:
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 打印优先级队列
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 排序数组优先级队列
- 更改运行时优先级队列的排序功能
- 优先级队列构造函数的工作
- 实现优先级队列
- 优先级队列功能比较
- 在C++中打印对的优先级队列的所有值时出现问题
- 使用堆的优先级队列,具有相同键的值不遵循 FIFO(先进先出)
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 是否可以使用简单队列创建优先级队列
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- Cython中带有自定义比较器的优先级队列
- 优先级队列比较器[C++].
- asio::io_service 具有多个线程的优先级队列处理