|
11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123
|
|
Переписать std::map09.08.2010, 20:27. Показов 3021. Ответов 11
Метки нет (Все метки)
Добрый вечер!
Есть работающая программа, в которой используется map, все работало хорошо, но теперь немного изменились условия и объем данных, с которыми теперь придется работать значительно увеличился, в разы. Поскольку map используется во многих местах и обращение к нему происходит через итераторы, то заменять map на что-то другое крайне нежелательно, поэтому решил переписать map таким образом: поскольку на скорость работы программы и объем данных, которые держатся в памяти сильно влияет именно значение, а не ключ map'а, т.е на каждый ключ приходится выделять память под структуру, и потом еще ее чистить, то есть идея заливать в map сначала все ключи, а значения забивать NULL, а потом при обращении к i-му элементу через итератор, определив, что там NULL подгружать данные. Если б работал с вектором, перегружал бы operator[] и там уже подгружал данные, но вот как мне быть и что переписывать в map'e, если обращение к нему идет только через итераторы? Знатоки stl, помогите пожалуйста!
0
|
|
| 09.08.2010, 20:27 | |
|
Ответы с готовыми решениями:
11
Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? Emplace в std::map. Как добавить элемент в std::map без копирования?
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
| 09.08.2010, 20:42 | |
|
а как это будет реализовано? унаследовано от std::map?
0
|
|
|
11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123
|
||
| 09.08.2010, 20:58 [ТС] | ||
|
Добавлено через 12 минут хотя, если у кого есть какие другие идеи - все равно с удовольствием воспользуюсь, главное, чтоб заработало )
0
|
||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
| 09.08.2010, 21:03 | |
|
видимо придется перегружать begin(), end() чтобы они возвращали новые итераторы, унаследованные от std::map<..>::iterator, а там уже перегружать операторы *,++ итд
ну мне так кажется, думаю это будет не очень просто
1
|
|
|
11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123
|
||
| 09.08.2010, 21:11 [ТС] | ||
|
Добавлено через 5 минут было б проще, если б можно было взять vector <pair<...> > и перегрузить operator[], но тогда все равно придется переоперделять оператор ++ и * и тп, но, получается, что без этого не обойтись хоть тут, хоть там (
0
|
||
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
|
||
| 10.08.2010, 00:17 | ||
|
0
|
||
|
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
|
|
| 10.08.2010, 11:13 | |
|
А не проще ли будет подменить немного итератор?
0
|
|
|
11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123
|
|||
| 10.08.2010, 19:17 [ТС] | |||
|
Добавлено через 7 минут а на самом деле, вариант с operator[] и вектором пар я сегодня реализовал и все успешно работает, но вот очень нехорошо, что нужно оставить вариант с map'ом, т.е. вектор не нужен и тут либо переписывать итераторы либо слушать новые идеи )
0
|
|||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
| 10.08.2010, 19:34 | |
|
я не понимаю, вы хотите не модифицируя старый код сделать чтобы он заработал по-новому?
0
|
|
|
11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123
|
||
| 10.08.2010, 19:43 [ТС] | ||
|
0
|
||
|
|
|
| 22.08.2010, 17:52 | |
|
Какой размер данных? Одной структуры/обьекта?
Какие операции чаще всего выполняются с данными ? Каким образом вы обращаетесь к массиву map ? Можно примеры кода ?
0
|
|
|
11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123
|
|
| 22.08.2010, 20:13 [ТС] | |
|
Andrew_Lvov, вопрос уже давно решен, спасибо за внимание к проблеме. Вместо map использовал вектор пар, программа прекрасно работает, сейчас занимаюсь уже другими вещами.
0
|
|
| 22.08.2010, 20:13 | |
|
Помогаю со студенческими работами здесь
12
Стоит ли очищать в деструкторе std::map , std::vecotor? std::map, std::vector и порядок обхода коллекции
std::map или std::vector? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|