如何将java优先级队列转换为c ++优先级队列?

时间:2016-06-06 18:21:05

标签: java c++

我正在将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 ++代码

4 个答案:

答案 0 :(得分:1)

将比较运算符定义为

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

您也可以将其定义为免费功能。

答案 1 :(得分:1)

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或更高版本的编译器(我认为),您只需使用lambdas而不是struct定义operator()。见this answer

答案 2 :(得分:0)

似乎你没有设定一个条件来回复虚假&#39;在C ++ cmp中

struct cmp
{
    bool operator()(Item it1, Item it2)
    {
        if(it1.dist > it2.dist)
            return true;
        else 
            return false
    }
};

答案 3 :(得分:0)

您需要修复返回的值:

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

    }
};