Как правильно реализовать функцию/метод принимающий на вход компаратор?
Вот для примера возьмем функцию сортировки пузырьком, как правильно реализовать в ней компаратор?
template<class Iterator>
void BubbleSort(Iterator first, Iterator last) {
for (Iterator i = first; i < last; i++) {
for (Iterator j = first; j != last; j++) {
if (*j > *(j + 1)) {
std::swap(*j, *(j + 1));
}
}
}
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Примерно так..
template<class Iterator, class Comparator>
void BubbleSort(Iterator first, Iterator last, Comparator cmp)
...
if (cmp(*j,*(j + 1))) {
...
Но я бы делал так:
template<typename Iter, typename Less>
void BubbleSort(Iter b, Iter e, Less c)
{
--e;
for(; b != e; ++b)
for(Iter k = e, j = k--; j != b; j = k--)
if (c(*j,*k)) swap(*j,*k);
}
Для параметра по умолчанию можно сделать так:
template<typename Iter, typename Less>
void BubbleSort(Iter b, Iter e, Less c)
{
--e;
for(; b != e; ++b)
for(Iter k = e, j = k--; j != b; j = k--)
if (c(*j,*k)) swap(*j,*k);
}
template<typename Iter>
void BubbleSort(Iter b, Iter e)
{
BubbleSort(b, e, std::less<>());
}