我重寫Java代碼爲C++代碼時遇到複製Java的優先級隊列的問題..如何將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++,但它無法正常工作:
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++代碼
'bool操作符()(Item it1,Item it2)'在C++中,傳遞const引用,而不是通過值。不要將Java用作編寫C++代碼的模型。 'bool operator()(const Item&it1,const Item&it2)' – PaulMcKenzie
C++版本實現[strict weak ordering](http://en.wikipedia.com/wiki/Strict_weak_ordering),所以它基本上不能處理同等優先級的值。 Java版本可以處理相同的優先級,但會以任意順序(不是FIFO或LIFO)返回相同優先級的值,所以通常最好不要具有同等優先級的值。如果你沒有相同優先級的值,那麼是的,你可以轉換。 – Andreas
@Andreas:'std :: priority_queue'處理相等的值就好了。 –