Мой вопрос во многом похож на этот: Pass a custom comparator through a function, но я попробовал предлагаемое там решение и не смог заставить его работать.Пользовательский компаратор (заказ) в качестве параметра (порядка отображения) карты?
В двух словах, у меня есть метод, который держит несколько отсортированных структуры и выполняет несколько сравнений, всегда на элементах типа int
, все с использованием того же заказом. Порядок составляет , определяемый при вызове метода.
ПРЕДНАЗНАЧЕН вызов будет выглядеть примерно так: myFunction(std::greater<int>());
Во-первых, я попытался объявить функцию: void myFunction(binary_operator<int, int, bool> order);
но, согласно this explanation, binary_function
не подходит в качестве базового класса в вызовах функций.
Наконец, я попытался предложение от this answer (и во многих других местах), которая предложила с использованием шаблонов. Но я все еще не могу скомпилировать свой код.
Минимальный нерабочим пример:
template <typename Comparator>
void myFunction(Comparator order){
if (order(1,2)){
// some stuff
// COMPILES OK
}
std::vector <int> vecToSort;
// ... initialize
std::sort(vecToSort.begin(), vecToSort.end(), order); // works
// COMPILES OK
std::multimap <int, int, order > boundary;
// STARTS KICKING, SCREAMING AND SHOUTHING
}
и ошибка компиляции я получаю:
error: type/value mismatch at argument 3 in template parameter list for ‘template class std::multimap’ error: expected a type, got ‘order’
я понял, тот же трюк должен работать для обоих. Это не. (Редактирование: Я вижу проблему type
/object
сейчас)
Может кто-нибудь объяснить, что происходит здесь и как получитьmultimap
использовать порядок, переданный в качестве аргумента функции?
PS: Я не использую boost для этого проекта.
ошибка очень ясная, заказ - это не тип, поэтому не может быть передан в параметр шаблона. – yngccc
'std :: multimap' требует ** типа ** в качестве параметра шаблона, и вы используете объект. – juanchopanza
хорошо, я вижу проблему типа/объекта. Но это просто ответит * почему * Я получаю ошибку, а не как использовать мой желаемый порядок (переданный как параметр функции), чтобы упорядочить мои структуры, в том числе «multimap». – penelope