Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как быстрее заполнить std::map ?

43K
26 августа 2011 года
maximsoft
13 / / 25.04.2009
Как известно map не очень быстро работает в режиме вставки.
Но если есть отсортированный массив.
Есть ли хитрость для увеличения скорости заполнения std::map или сортированый список занесется без потери скорости?
260
26 августа 2011 года
Ramon
1.1K / / 16.08.2003
А не проще тупо искать в вашем отсортированном массиве, если он статический, а полагаю так и есть, бинарным поиском?
87
27 августа 2011 года
Kogrom
2.7K / / 02.02.2008
Вот тут:
http://www.cplusplus.com/reference/stl/map/insert/
сказано: Efficiency of this operation can be dramatically improved by providing the appropriate value in parameter position.

Правда, в примере не сказано про массив. Но вставка массива объектов типа pair одной командой осуществима. Возможно это даст какой-то выигрыш.

Можно сделать как-то так:
 
Код:
typedef pair<char,int> cipair;
    cipair data[] = {cipair('a', 1), cipair('b', 2), cipair('c', 3)};

    map<char,int> mymap;
    mymap.insert(data, data + 3);


А можно сразу без инсерта конструктором.
75K
20 сентября 2011 года
trututu
2 / / 20.09.2011
Цитата: Kogrom
Вот тут:
http://www.cplusplus.com/reference/stl/map/insert/
сказано: Efficiency of this operation can be dramatically improved by providing the appropriate value in parameter position.

Правда, в примере не сказано про массив. Но вставка массива объектов типа pair одной командой осуществима. Возможно это даст какой-то выигрыш.

Можно сделать как-то так:
 
Код:
typedef pair<char,int> cipair;
    cipair data[] = {cipair('a', 1), cipair('b', 2), cipair('c', 3)};

    map<char,int> mymap;
    mymap.insert(data, data + 3);


А можно сразу без инсерта конструктором.



Спасибо!

43K
22 сентября 2011 года
maximsoft
13 / / 25.04.2009
немного перефразирую, т.к. ситуация с хранением данных прояснилась:

существует контейнер:

map(pair<string, int>)

также существует файл со структурой:

слово1 <пробел> целое_число <перенос строки>
слово2 <пробел> целое_число <перенос строки> ... и т.д.

Вопрос: есть ли способ (отличный от insert или конструктора) чтобы сразу загрузить в контейнер map данные из файла (вроде того - знаем размер блока данных, создаем map нужного размера - и через указатель копируем данные...)

возможно следует изменить string на char[x]

ps: ощущение такое, что пишу чушь, потому что не вникал в суть и структуру контейнеров.
Поправьте меня пожалуйста.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог