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