LINUX.ORG.RU

Длинный синтаксис std::sort

 ,


0

3

Добрый день, ЛОР.

Решил я тут сдуть пыль со старого кода и перевести его с кутешного qSort() на std::sort().

У кутешного было два варианта:

  • полный, сильно похожий на std::sort, с двумя итераторами и необязательной функцией сравнения;
  • короткий, которому передавалась ссылка на имя контейнера.

Аналогом первого является собственно std::sort.

Я правильно понимаю, что у второго аналогов нет?

★★★★★
Ответ на: комментарий от fsb4000

Понял, спасибо.
Но сразу на это прыгать пока не готов. Мало ли на чём код собирать придётся… Лучше подлиннее напишу.

hobbit ★★★★★
() автор топика
Ответ на: комментарий от AntonI

Я в итоге так и сделал. :) С комментарием, что возможно, потом, когда-нибудь переползу на C++20.

Но со старой Qt никаких обёрток не нужно было. :) Код удлиняется…

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Код удлиняется на одну строчку. Если назвать эту обертку qSort то вообще больше никаких изменений, кроме замены хидера:-)

AntonI ★★★★★
()

перевести его с кутешного qSort() на std::sort().

Нескромный вопрос: зачем ? Просто от кьюта отвязать ?

AKonia ★★★
()

у второго аналогов нет?

Ну как бы несложно, наверное, запилить inline функцию, которая будет принимать контейнер и вызывать std::sort(v.begin(), v.end()). Не?

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от AKonia

Нескромный вопрос: зачем ?

В Qt 5.15 уже идут предупреждения, что qSort() deprecated. А потом могут и вообще выкинуть, знаем мы такое.

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Код удлиняется…

Это не так принципиально. Я бы больше переживал за потенциальную разницу в порядке следования «одинаковых» ключей между qSort() и std::sort() - стоит потратить время и убедиться что Ваши алгоритмы к этому нечувствительны. Сразу оговорюсь - любая такая чувствительность это баг, однозначно.

bugfixer ★★★★★
()
Ответ на: комментарий от AntonI

Если назвать эту обертку qSort

Я бы абс точно так не делал: (a) есть опасность что будет дёргаться «неправильный» qSort(), и (b) мне было бы очень интересно увидеть на diffs все affected callsites дабы правильно оценить риски и понять на чём сфокусироваться при тестировании.

bugfixer ★★★★★
()

Есть стандартные контейнеры с методом sort(). В древних талмудах рекомендовали предпочитать методы контейнеров алгоритмам.

Booбщем, если это std::list - то у него есть ‘краткая форма’ - .sort().

nikitos ★★★
()
Ответ на: комментарий от nikitos

Делов-то…

void sort(auto & container) requires requires { container.sort(); } {
    return container.sort();
}
void sort(auto & container) {
    return std::sort(container.begin(), container.end());
}
Siborgium ★★★★★
()
Ответ на: комментарий от bugfixer

Написал обёртку в одну строчку :) Естественно, назвал так, чтобы было понятно, что это другое. Протестировал, сортировка работает. По-хорошему, надо бы ещё быстродействие проверить…

hobbit ★★★★★
() автор топика
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от anonymous

Появились. Поддержка не везде. Я ещё не тыкал (но планирую).

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Протестировал, сортировка работает.

;) и славненько ;)

По-хорошему, надо бы ещё быстродействие проверить…

А вот здесь начнётся самое интересное :)

bugfixer ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.