unordered_map/set + capactity()

dreverser
dreverser

Очень странно что у контейнеров есть столько ненужных на мой взгяд методов, которые никак не помогают вычислить объем аллоцируемой памяти.

Разработчики парятся какими то вычислениями что бы узнать. 

https://stackoverflow.com/questions/25375202/how-to-measure-memory-usage-of-stdunordered-map

И все равно это будет не точно. Поскольку есть еще размер ноды.

Самый точный способ выглядит уродски

https://gist.github.com/yuyoyuppe/51e098c1adf64114d2b1

В string есть метод capacity а в контейнерах нет.

Не знаю почему. Но хочется что бы появились.

-3
рейтинг
4 комментария
Дмитрий

В stl структура std::vector (std::string) точно определена. У остальных контейнеров реализация может меняться в широких пределах. Текущая stl абстрагирована от реализации. Она предполагает, что разработчика не будет заботить внутреннее устройство контейнеров.

Дмитрий
dreverser

А причем здесь структура ? я предлагаю добавить метод capacity()

А какая будет имплементация пусть думают в каждом конктретном стл те кто его реализуют - МС ГЦЦ Кланг итд

 

dreverser
Дмитрий

На мой взгляд это задача для "stl 2.0", - отойти от концепции асбтрактных требований к полному описанию структур контейнеров. То, что в рамках стандарта могут быть разные имплементации под одним именованием, - нехорошо. Это доказал size() для листа, который до c+11 на gcc вычислялся через полный обход контейнера. Его приходилось избегать. У Microsoft же была реализация с отдельным счетчиком. И вызов size() происходил без задержек.
Вычислить capacity() у std::vector - не проблема. Как capacity() будет считаться для unordered_map - не понятно и не очевидно.

Дмитрий
dreverser

Дмитрий, для вас не очевидно, для меня очевидно, но мне нужен доступ к ноде что бы получить ее размер, а она в привате.

Поэтому не вижу проблем в самих контейнерах это имплементировать.

Собственно почему велосипеды и пишутся. Потому что легче написать свое, чем потратиь время на убеждения других что бы добавить что то с стандартное.

dreverser
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения