Size: a a a

2020 July 22

t

tamtakoe in supapro.cxx
Я правильно понимаю, что при сортировке вектора или дэка элементы в памяти никуда не сдвигаются, а только меняются ссылки между ними? Т.е. грубо говоря сортировка строк займет то же время, что и сортировка указателей на строки?
источник

AS

Anatoly Shirokov in supapro.cxx
tamtakoe
Я правильно понимаю, что при сортировке вектора или дэка элементы в памяти никуда не сдвигаются, а только меняются ссылки между ними? Т.е. грубо говоря сортировка строк займет то же время, что и сортировка указателей на строки?
неправильно понимаешь, именно объекты перемещаются при сортировке вектора и деки
источник

t

tamtakoe in supapro.cxx
Anatoly Shirokov
неправильно понимаешь, именно объекты перемещаются при сортировке вектора и деки
Т.е., чтобы ускорить процесс нужно перегнать коллекцию в коллекцию указателей и их уже отсортировать, т.к. указатели весят меньше чем сами объекты?
источник

AS

Anatoly Shirokov in supapro.cxx
tamtakoe
Т.е., чтобы ускорить процесс нужно перегнать коллекцию в коллекцию указателей и их уже отсортировать, т.к. указатели весят меньше чем сами объекты?
откуда такие выводы?
источник

AS

Anatoly Shirokov in supapro.cxx
цепочка должна быть такой: для решения задачи вектор должен быть отсортирован, сортирую.
источник

AS

Anatoly Shirokov in supapro.cxx
и никаких других вопросов пока не должно возникать
источник

AS

Anatoly Shirokov in supapro.cxx
а вот когда к вам придут и скажут, что сортировка жутко тормозит, вот тогда вы возьмете профилировщик и найдете хотпоинты и будете думать как это оптимизировать
источник

t

tamtakoe in supapro.cxx
Anatoly Shirokov
откуда такие выводы?
Если элементы перемещаются в памяти, то затраты на копирование тяжелых элементов будут больше чем на копирование легких указателей
источник

AS

Anatoly Shirokov in supapro.cxx
tamtakoe
Если элементы перемещаются в памяти, то затраты на копирование тяжелых элементов будут больше чем на копирование легких указателей
почему копирование а не обмен?
источник

AS

Anatoly Shirokov in supapro.cxx
если объект поддерживает обмен состоянием (swap), то это очень эффективно
источник

AS

Anatoly Shirokov in supapro.cxx
но повторю https://t.me/supapro/713989
источник

t

tamtakoe in supapro.cxx
Anatoly Shirokov
почему копирование а не обмен?
именно объекты перемещаются при сортировке вектора и деки
Переместить значит удалить со старого места и вставить на новое. Иначе менялись бы просто ссылки на объекты во внутренней структуре вектора
источник

AS

Anatoly Shirokov in supapro.cxx
tamtakoe
именно объекты перемещаются при сортировке вектора и деки
Переместить значит удалить со старого места и вставить на новое. Иначе менялись бы просто ссылки на объекты во внутренней структуре вектора
так, мне кажется я сказал все.
источник

AS

Anatoly Shirokov in supapro.cxx
у объекта есть состояние, если в классе объекта поддерживается обмен состоянием, то это очень эффективно и безопасно по отношению к исключениям:

struct myobject {
   std::string state;
   void swap(myobject& other) {
          std::swap(state, other.state);
   }
};
источник

t

tamtakoe in supapro.cxx
Anatoly Shirokov
у объекта есть состояние, если в классе объекта поддерживается обмен состоянием, то это очень эффективно и безопасно по отношению к исключениям:

struct myobject {
   std::string state;
   void swap(myobject& other) {
          std::swap(state, other.state);
   }
};
Ок. Тогда перепишу сортировку указателей на сортировку самого объекта
источник

ПК

Побитый Кирпич... in supapro.cxx
tamtakoe
именно объекты перемещаются при сортировке вектора и деки
Переместить значит удалить со старого места и вставить на новое. Иначе менялись бы просто ссылки на объекты во внутренней структуре вектора
перемещение строк > ~15 символов дешевле копирования в несколько раз
источник

ПК

Побитый Кирпич... in supapro.cxx
сравнимо с копированием указателя вернее
источник

t

tamtakoe in supapro.cxx
Побитый Кирпич
перемещение строк > ~15 символов дешевле копирования в несколько раз
Строки для примера взяты. Там тяжелые структуры будут
источник

ПК

Побитый Кирпич... in supapro.cxx
tamtakoe
Строки для примера взяты. Там тяжелые структуры будут
Главное чтобы они поддерживали move семантику, тогда проблем быть не должно.
источник

TS

Till Schneider in supapro.cxx
а сортировка данных по указателям повлечет за собой кэшмиссы, имхо
источник