Пользовательский компаратор (упорядочение) как (мульти) параметр упорядочения карты?

Мой вопрос во многом похож на этот: Передать пользовательский компаратор через функцию, но я попробовал решение, предложенное там, и не смог заставить его работать.

В двух словах, у меня есть метод, который сохраняет несколько отсортированных структур и выполняет несколько сравнений, всегда с элементами типа int, все используют один и тот же порядок. Порядок определяется при вызове метода.

намеренный звонок будет выглядеть примерно так: myFunction(std::greater<int>());

Сначала я попытался объявить функцию как: void myFunction(binary_operator<int, int, bool> order); но согласно это объяснение, binary_function не подходит для использования в качестве базового класса в вызовах функций.

В заключение, Я старался предложение от этот ответ (и многие другие сайты), на которых предлагалось используя шаблоны. Но я до сих пор не могу заставить мой код скомпилироваться.

Минимальный нерабочий пример:

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
}

и ошибка компиляции я получаю:

ошибка: несоответствие типа / значения в аргументе 3 в списке параметров шаблона для «шаблона класса std :: multimap»
ошибка: ожидал тип, получил «заказ»

Я полагал, что та же самая уловка должна работать для обоих. Это не. (редактировать: я вижу type/object проблема сейчас)

Может кто-нибудь объяснить, пожалуйста, что здесь происходит и как получить multimap использовать порядок, переданный в качестве аргумента функции?

PS: я не использую boost для этого проекта.

0

Решение

Это должно быть объявлено следующим образом:

std::multimap <int, int, Comparator> boundary(order);
^^^^^^^^^^

Как говорится в комментариях, вы должны предоставить type не object, Эти документы для Построить мультикарту приведу несколько примеров.

2

Другие решения

использование Comparator а также order в этой форме:

std::multimap <int, int, Comparator> boundary (order);

Сначала передайте тип сравнения внутри <> а затем передать объект сравнения в конструктор.

2

По вопросам рекламы [email protected]