cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

unordered_map/set + capactity() #270

Closed apolukhin closed 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +3, -6 Автор идеи: dreverser

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

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

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

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

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

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

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

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

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

apolukhin commented 3 years ago

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

dreverser, 29 марта 2018, 12:25 А причем здесь структура ? я предлагаю добавить метод capacity()

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

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

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

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

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

apolukhin commented 3 years ago

Дубликат #69