Почему я не могу создать std :: set с экземпляром предиката, но я могу назначить std :: set, построенный таким образом?

Итак, у меня есть массив (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)

В чем проблема с регулярной конструкцией? Почему задание работает? Какая разница здесь, что мне не хватает? Любая помощь очень ценится, спасибо.

Ой, извините за название вопроса, я не совсем уверен, как это назвать.

8
задан Robert Kelly 14 March 2019 в 18:26
поделиться