Итак, у меня есть массив (0 - n), содержащий значения, которые я хочу использовать std :: set для его сортировки.
Массив без знака int стоимость [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 (стоимость) вызывает кучу ошибок, говоря такие вещи для каждого вызова члена набора:
ошибка: запрос на удаление члена в node_queue, который имеет
не классовый тип std :: set (ProxySorter)
В чем проблема с обычной конструкцией? Почему назначение работает? Какая разница здесь, что я скучаю? Любая помощь с благодарностью, спасибо.
О, извините за название вопроса, я не совсем понял, как это назвать.