Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2021, 12:22   #1
ezus
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 78
По умолчанию MS VS-2017 - MFC - как увеличить размер CMap

Добрый день.

У меня большие и тяжелые операции с CMapWordToPtr.
В описании сказано, что изначальный размер блока задан 10.
Это очень мало для работы с десятками тысяч ключей.

Вопрос: возможно ли увеличить размер блока для CMapWordToPtr?

Спасибо.
ezus вне форума Ответить с цитированием
Старый 09.02.2021, 12:37   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

ezus, наверное, это https://docs.microsoft.com/ru-ru/cpp...#inithashtable

P.S. если не секрет, как вообще угораздило вляпаться в этот класс ))
Алексей1153 вне форума Ответить с цитированием
Старый 09.02.2021, 13:11   #3
ezus
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 78
По умолчанию

Алексей1153,

1. К сожалению вариант
Код:
CMapWordToPtr _map(INT_PTR nBlockSize = 111);
возвращает ошибки типа

Error C3867 'TreeTag::_map': non-standard syntax; use '&' to create a pointer to member

2.
Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
P.S. если не секрет, как вообще угораздило вляпаться в этот класс ))
Это больная мозоль: система большая и древняя, я наталкивался на файлы с FARs.
А переходить на новые библиотеки начальство не решается.

3. Есть положительная сторона: мне 69 лет, а найти моложе на MFC им не удалось. Вот я и работаю.

Последний раз редактировалось ezus; 09.02.2021 в 13:37.
ezus вне форума Ответить с цитированием
Старый 09.02.2021, 14:16   #4
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от ezus Посмотреть сообщение
К сожалению вариант
Код:
CMapWordToPtr _map(111);
А так?
FrosyaZZ вне форума Ответить с цитированием
Старый 09.02.2021, 14:29   #5
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

если нужно сразу аллокацию произвести, то второй параметр тоже надо (он по умолчанию, правда, и так 1)
Код:
void InitHashTable(111,TRUE);
ezus, ну, я MFC тоже использую, но контейнеры - из STL. Они как-то удобнее. Даже в Qt я предпочитаю STL-ные контейнеры
Алексей1153 вне форума Ответить с цитированием
Старый 09.02.2021, 15:19   #6
ezus
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 78
По умолчанию

Я так понял, что сначала
Код:
CMapWordToPtr _mapTreeAllDn;
а потом можно
Код:
_mapTreeAllDn.InitHashTable(111,TRUE);
ezus вне форума Ответить с цитированием
Старый 09.02.2021, 15:38   #7
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

ezus, в конструкторе как раз размер блока можно указать
https://docs.microsoft.com/ru-ru/cpp...cmapstringtoob

Код:
CMapWordToPtr _mapTreeAllDn(100);
а при помощи метода InitHashTable - можно зарезервировать место заранее

В общем, там в доках всё написано. Пусть и на английском )

Но сам я с этим контейнером не работал
Алексей1153 вне форума Ответить с цитированием
Старый 09.02.2021, 18:47   #8
ezus
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 78
По умолчанию

Все Ок
Спасибо
ezus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MS VS-2017 C++ MFC - Как почистить CPtrArray ezus Visual C++ 9 03.11.2018 00:15
Как увеличить размер курсора мыши больше чем 32x32 пикселя Win10 Vitalydz Фриланс 3 27.12.2016 02:03
Как увеличить размер стека? Prizrak86 C# (си шарп) 10 18.11.2011 17:08
Как увеличить размер БД? Sergey Bi. старший БД в Delphi 5 07.04.2011 21:50
как увеличить максимальный размер структурных типов? bullvinkle Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2008 09:54