如何将java优先级队列转换为c++;优先队列? 我将java代码改写为C++代码,并且在java的优先级队列中有一个问题。

如何将java优先级队列转换为c++;优先队列? 我将java代码改写为C++代码,并且在java的优先级队列中有一个问题。,java,c++,Java,C++,Java优先级队列的比较函数如下所示: public int compareTo(Item that) { if (this.dist < that.dist) return -1; if (this.dist > that.dist) return 1; return 0; } 这是我的C++代码优先级队列 我这样调用优先级队列 priority_queue<Item, vector<Item>, cmp&

Java优先级队列的比较函数如下所示:

  public int compareTo(Item that) {
    if (this.dist < that.dist)
      return -1;
    if (this.dist > that.dist)
      return 1;
    return 0;
  }

这是我的C++代码优先级队列

我这样调用优先级队列

priority_queue<Item, vector<Item>, cmp> que;
优先级;
但是,Java的顺序和C++的顺序是不同的

请帮帮我


如果这还不够示例代码,我可以提供我的全部代码。java和C++代码

看起来C++中没有设置条件“返回false”
struct cmp
{
    bool operator()(Item it1, Item it2)
    {
        if(it1.dist > it2.dist)
            return true;
        else 
            return false
    }
};

<>你似乎没有在C++ cMP

中设置“返回false”的条件
struct cmp
{
    bool operator()(Item it1, Item it2)
    {
        if(it1.dist > it2.dist)
            return true;
        else 
            return false
    }
};

将比较运算符定义为

struct cmp
{
    bool operator()(const Item & it1, const Item & it2)    // pass by a const reference
    {
        return it1.dist > it2.dist;
    }
};

您还可以将其定义为自由函数。

将比较运算符定义为

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)
    {
        return (it1.dist > it2.dist)

    }
};

您需要修复返回的值:

struct cmp
{
    bool operator()(Item it1, Item it2)
    {
        return (it1.dist > it2.dist)

    }
};
理想情况下,
if
检查应颠倒:

if ( it1.dist < it2.dist)
重要的是,
Item
参数在理想情况下必须是
const
,并且通过引用:

bool operator()(const Item& it1, const Item& it2)
{
    return  it1.dist < it2.dist;
}
bool运算符()(常量项和it1、常量项和it2)
{
返回it1.dist
如果您使用的是C++11或更高版本的编译器(我猜是这样),您可以简单地使用lambdas,而不是定义了
operator()
struct
。看

理想情况下,
if
检查应颠倒:

if ( it1.dist < it2.dist)
重要的是,
Item
参数在理想情况下必须是
const
,并且通过引用:

bool operator()(const Item& it1, const Item& it2)
{
    return  it1.dist < it2.dist;
}
bool运算符()(常量项和it1、常量项和it2)
{
返回it1.dist

如果您使用的是C++11或更高版本的编译器(我猜是这样),您可以简单地使用lambdas,而不是定义了
operator()
struct
。请参阅

<代码>布尔操作程序()(项目IT1,项目IT2)< /C> > C++,通过const引用,而不是值。不要用java作为C++代码编写的模型。code>bool操作符()(const-Item&it1,const-Item&it2)
C++版本实现,因此它基本上无法处理同等优先级的值。Java版本可以处理同等优先级,但将以任意顺序返回同等优先级的值(不是FIFO或LIFO),因此通常最好不要具有同等优先级的值。如果没有相等优先级的值,则可以转换为“是”。@Andreas:
std::priority\u queue
可以很好地处理相等的值。@Andreas:如果需要,则可以。通常,它不需要这样做,因为相等元素的相对顺序是未指定的,所以可以假设
a
可以放在
b
之后,如果
!(a<b)< />代码> <代码>布尔操作程序()(项目IT1,项目IT2)< /C> C++中,通过const引用,而不是值。不要用java作为C++代码编写的模型。code>bool操作符()(const-Item&it1,const-Item&it2)
C++版本实现,因此它基本上无法处理同等优先级的值。Java版本可以处理同等优先级,但将以任意顺序返回同等优先级的值(不是FIFO或LIFO),因此通常最好不要具有同等优先级的值。如果没有相等优先级的值,则可以转换为“是”。@Andreas:
std::priority\u queue
可以很好地处理相等的值。@Andreas:如果需要,则可以。通常,它不需要这样做,因为相等元素的相对顺序是未指定的,所以可以假设
a
可以放在
b
之后,如果
!(a
。我修复了它们,但它有无限循环哈哈。。这似乎不是优先级问题谢谢~~@parkyoungjun也许你可以把它作为另一个问题发布。我解决了它们,但它有无限循环哈哈。。这似乎不是优先问题谢谢~~@parkyoungjun也许你可以把它作为另一个问题发布。