Std:: Flat_map, std:: Flat_set и резервирование памяти?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Std:: Flat_map, std:: Flat_set и резервирование памяти?

Сообщение Anonymous »

Я очень рад использовать std:: Flat_map и std:: Flat_set в своей базе кода. Есть несколько случаев, когда мне нужно сохранить упорядоченный набор данных с возможностью поиска в непрерывной памяти, а затем передать его в другую функцию в виде простого массива в стиле C. Исторически я делал это, вручную вставляя сортировку в std::vector или массовую вставку, а затем вызывая std::sort(). Я обертываю std::lower_bound() в метод доступа для поиска, получаю доступ к ```std::vector::data()`` и все готово.
С std::flat_map Все это я получаю в стандарте. Однако API, похоже, не имеет возможности зарезервировать хранилище перед созданием адаптера. Я решил эту проблему, сначала создав контейнеры для ключа и значения самостоятельно, зарезервировав каждый из них, а затем переместив их в адаптер, но это обременительно. Это также не позволяет мне зарезервировать дополнительное хранилище позже, если произойдет массовая вставка или будет известно об изменении предполагаемой верхней границы.
Похоже, что внутренние контейнеры являются частными, согласно стандарту, поэтому с помощью подклассов добраться до него невозможно. И std::flat_map::keys(), и std::flat_map::values() возвращают константные ссылки, так что это бесполезно. Полагаю, я мог бы использовать std::flat_map::extract() для возврата контейнеров, а затем зарезервировать больше места для хранения, а затем на месте создать новую исходную карту?
Все это кажется немного неуклюжим. Моя цель — уменьшить перераспределение (и фрагментацию) в моей среде, где у меня нет преимуществ диспетчера виртуальной памяти, а затраты на распределение не являются незначительными.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-storage
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • `std::map<std::string, enum{1, 2, 3, 4}>` (или std::map<std::string, tuple<bool, bool>>`) кэширует` против `std: :set<st
    Anonymous » » в форуме C++
    0 Ответы
    323 Просмотры
    Последнее сообщение Anonymous
  • Как использовать функцию Set Set State Set Set Satwerive AMD (ADL) (для программного переворачивания)
    Anonymous » » в форуме C#
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Java Convert Map> в Map> [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    74 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать Set> в Set?
    Anonymous » » в форуме JAVA
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • VirtualAllocEx — резервирование памяти не возвращает базовый адрес
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»