Я не думаю, что векторная структура данных для приоритетной очереди для поиска A * является хорошей идеей, потому что вы будете постоянно добавлять один элемент в списке. Если полоса (я полагаю, это то, как вы это делаете) велика и элемент должен быть добавлен в середине, это крайне неэффективно.
Когда я реализовал A * в Java несколько недель назад, я использовал Java PriorityQueue, который, очевидно, основан на куче приоритетов, и это кажется хорошим способом сделать это. Я рекомендую использовать set
в C ++.
РЕДАКТИРОВАТЬ: спасибо Ники. Теперь я понимаю, как реализованы двоичные кучи (с массивом), и я понимаю, что вы на самом деле спрашиваете в своем вопросе. Я подозреваю, что priority_queue
- лучший вариант, хотя (как сказал Игорь) было бы нетрудно заменить его на set
, чтобы проверить его производительность. Я предполагаю, что есть причина, по которой очереди с приоритетами (по крайней мере, в Java и C ++) реализованы с использованием двоичных куч.