如何将java优先级队列转换为c++;优先队列? 我将java代码改写为C++代码,并且在java的优先级队列中有一个问题。
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&
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也许你可以把它作为另一个问题发布。