Итак, у меня есть массив (0 - n), содержащий значения, которые я хочу, чтобы std :: set использовал для сортировки. {{ 1}} Массив имеет вид unsigned int cost [n] .
Я использую следующий функтор для этой сортировки:
struct ProxySorter {
ProxySorter(const unsigned* arr) : proxy_array(arr) {}
bool operator()(const unsigned& a, const unsigned& b) const {
return proxy_array[a] < proxy_array[b];
}
const unsigned* proxy_array;
};
Итак, вот в чем проблема ... Когда я создаю набор, это допустимо:
std::set<unsigned, ProxySorter> node_queue = std::set<unsigned, ProxySorter>(ProxySorter(cost));
Я не получаю ошибок, и все работает, как ожидалось. Но это кажется взломанным и небрежным.
Однако это явно незаконно:
std::set<unsigned, ProxySorter> node_queue(ProxySorter(cost));
Попытка просто построить его с помощью ProxySorter (cost) вызывает кучу ошибок, говоря что-то подобное для каждого вызова элемента набора:
error: запрос на удаление элемента в node_queue, который имеет неклассовый тип std :: set
(ProxySorter)
В чем проблема с регулярной конструкцией? Почему задание работает? Какая разница здесь, что мне не хватает? Любая помощь очень ценится, спасибо.
Ой, извините за название вопроса, я не совсем уверен, как это назвать.