Я переписывание 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++ 's порядок отличается ..
Помогите мне пожалуйста
Если этого не достаточно, пример кода, я могу предоставить весь свой код , Java и C++ код
'bool operator() (Item it1, Item it2)' В C++ передайте ссылку const, а не по значению. Не используйте Java в качестве модели при написании кода на C++. 'bool operator() (const Item & it1, const Item & it2)' – PaulMcKenzie
Версия C++ реализует [строгий слабый порядок] (http://en.wikipedia.com/wiki/Strict_weak_ordering), поэтому он в принципе не может обрабатывать значения с равным приоритетом. Версия Java может обрабатывать равный приоритет, но возвращает значения с равным приоритетом в произвольном порядке (не FIFO или LIFO), поэтому обычно лучше не иметь значений с равным приоритетом. Если у вас нет значений с равным приоритетом, то да, вы можете конвертировать. – Andreas
@Andreas: 'std :: priority_queue' обрабатывает равные значения просто отлично. –