Size: a a a

2020 April 14

IS

Iskander Saitbatalov in pro.cxx
Alex
std::shuffle не может перемешать std::list (требует итератор с поддержкой operator+). Есть какое-то стандартное решение?
Можно написать кастомную обертку над std:list, которая будет реализовывать итераторы так, как хочется.
источник

AM

Alex Matveev in pro.cxx
Alex
я пишу юнит тест, очень не хочется иметь в тестбенче странный код, который сам требует тестирования, это какой-то порочный круг рекурсии)
справедливо
источник

DB

Dmitry Berkut in pro.cxx
Alex
вот тут не понял
std::vector temporary {std::make_move_iterarator (list.begin), std::make_move_iterarator(list.end)}
//sort temporary
list.assign(move iterators from list)
источник

A

Alex in pro.cxx
кстати, интересно, что в MSVC такая pair (с const типом) в вектор кладётся успешно, а ошибка только на erase
источник

IL

Ignat Loskutov in pro.cxx
кажется, что проще всего сделать вектор итераторов и его пошафлить
источник

A

Alex in pro.cxx
хорошая идея!
источник

A

Alex in pro.cxx
А про мув итераторы впервые слышу, почитаю, спс
источник

DB

Dmitry Berkut in pro.cxx
Или альтернатива - прокси сортировка (индексов)
источник

DB

Dmitry Berkut in pro.cxx
Но энивей, как потом доступ по индексам организовать?)
источник

A

Alex in pro.cxx
да, что-то такое будет проще всего, спс
источник

A

Alex in pro.cxx
в конце концов, можно вектор shared_ptr или unique_ptr (если последнее скомпилится)
источник

A

Alex in pro.cxx
А если я определю свободную шаблонную функцию bool operator==(const std::pair<T, U>&, const std::pair<T1, U1>&) , std::equal сможет её использовать для сравнения?
источник

A

Alex in pro.cxx
или мне вообще нужно просто вызывать версию equal c лямбдой... Короче. в моём коде не должно быть необходимости тулить pair <const T,...> вместо просто Т, только нужно научить std алгоритмы сравнивать const и не-const версии. И не нужен никакой лист.
источник

v

vehlwn in pro.cxx
Alex
А если я определю свободную шаблонную функцию bool operator==(const std::pair<T, U>&, const std::pair<T1, U1>&) , std::equal сможет её использовать для сравнения?
Для стандартных пар уже есть стандартные операторы сравнений.
источник

A

Alex in pro.cxx
они не работают из-за того, что слева pair<T, U>, а справа pair<const T, U>
источник

N

Neargye in pro.cxx
Alex
std::shuffle не может перемешать std::list (требует итератор с поддержкой operator+). Есть какое-то стандартное решение?
Что-то прикрутить с reference_wrapper? https://en.cppreference.com/w/cpp/utility/functional/reference_wrapper
источник

АК

Александр Караев in pro.cxx
Alex
они не работают из-за того, что слева pair<T, U>, а справа pair<const T, U>
должны работать
источник

v

vehlwn in pro.cxx
Александр Караев
должны работать
Нет, потому что это несовместимые типы.
источник

v

vehlwn in pro.cxx
vehlwn
Нет, потому что это несовместимые типы.
struct A{int a; int b;};
struct B{ const int a; int b;};
источник

АК

Александр Караев in pro.cxx
vehlwn
Нет, потому что это несовместимые типы.
сомнительно.. на равенство то можно уж сравнить
источник