Size: a a a

2020 August 17

AS

Alex Sandrov in pro.cxx
Andrei K
Есть пограничные варианты, хранить батчами по 10к элементов в векторе, в батч адресоваться по мапе. Ключи не отсортированные?
Не, ключи не сортированные, это текстовый ID из базы, как правило. Пока работает как map+vector, накладные расходы - только число shared_ptr в одном контейнере
источник

AK

Andrei K in pro.cxx
А зачем shared_ptr? Вектор не может владеть записями?
источник

AK

Andrei K in pro.cxx
Все записи в памяти лежат или своппятся на диск?
источник

AS

Alex Sandrov in pro.cxx
Btw, я просто думал, вдруг есть простое решение, которое я не знаю :)
Иногда я вижу тут(и не тут) интересные/удобные вещи, про которые не знал
источник

AK

Andrei K in pro.cxx
Удалять/менять ключ часто надо?
источник

AK

Andrei K in pro.cxx
Alex Sandrov
Btw, я просто думал, вдруг есть простое решение, которое я не знаю :)
Иногда я вижу тут(и не тут) интересные/удобные вещи, про которые не знал
Ну в целом если удаления не критичны, то мапа индексов и вектор — это самый быстрый по доступу вариант и самый кеш-френдли.
источник

AS

Alex Sandrov in pro.cxx
Andrei K
А зачем shared_ptr? Вектор не может владеть записями?
Чтобы делить данные с мапой. Т.е. сами данные лежат в единичном виде в памяти, а в мапе и в векторе - только указатели на них.
источник

AS

Alex Sandrov in pro.cxx
Andrei K
Все записи в памяти лежат или своппятся на диск?
В памяти
источник

AK

Andrei K in pro.cxx
Если нужно удаление или что-то надо делать с ключами — то либо декомпозиция на минибатчи, либо сквозную хеш-таблицу.
источник

AK

Andrei K in pro.cxx
*со сквозной адресацией.
источник

AK

Andrei K in pro.cxx
Alex Sandrov
Чтобы делить данные с мапой. Т.е. сами данные лежат в единичном виде в памяти, а в мапе и в векторе - только указатели на них.
Не комильфо. Лучше в вектор положить unique_ptr, а в мапу просто указатель.
источник

AS

Alex Sandrov in pro.cxx
Andrei K
Удалять/менять ключ часто надо?
Нет, я после запроса держу данные в том виде, как они пришли.
источник

AK

Andrei K in pro.cxx
Экономит индирекцию, лучше для кешей и всё такое.
источник

AK

Andrei K in pro.cxx
Если данные мувабельные, то еще лучше прям плоско в вектор.
источник

AK

Andrei K in pro.cxx
Будет очень хорошо по кешу. Векторизация, все дела.
источник

AK

Andrei K in pro.cxx
Alex Sandrov
Нет, я после запроса держу данные в том виде, как они пришли.
Тогда лучше плоско в вектор, в мапу указатели (индексы).
источник

AS

Alex Sandrov in pro.cxx
Andrei K
Не комильфо. Лучше в вектор положить unique_ptr, а в мапу просто указатель.
Ну вот как-то не хочется работать с указателями, но да, так оптимальнее получается
источник

AK

Andrei K in pro.cxx
Будет быстрее всего. Вплоть до 30% можно получить прироста по итерации по отношению к двум индирекциям шаред-поинтера.
источник

AK

Andrei K in pro.cxx
Alex Sandrov
Ну вот как-то не хочется работать с указателями, но да, так оптимальнее получается
Указателей не надо боятся, это именно тот случай, когда их использовать правильно. unique_ptr у владельца и всем остальным указатели.
источник

AS

Alex Sandrov in pro.cxx
Andrei K
Указателей не надо боятся, это именно тот случай, когда их использовать правильно. unique_ptr у владельца и всем остальным указатели.
Хорошо, спасибо
источник