использует ли STL мой аллокатор для всех нужд по выделению?
От: volodyja  
Дата: 25.03.08 15:40
Оценка:
хай всем

возникла такая задача — мне надо создавать небольшое дерево для поиска в нём данных, выделяя всю память из заранее выделенного пула, который небольшого размера.
начал рыть матчасть по аллокаторам, нашел примеры кода, в которых увидел пример использования аллокатора:

//! Template typedef std::map<..., PooledAllocator> to PooledList<Key, Value>::Type.
template<typename Key, typename Value, class Traits = std::less<Key> >
struct PooledMap
{
typedef std::map<Key, Value, Traits, PooledAllocator<std::pair<Key, Value> > > Type;
};

тут видно что из пула будут выделяться std::pair<Key, Value>, которые, вроде как, не будут содержать в себе полностью все служебные данные ноды дерева.
вопрос — как сделать так чтоб set полностью работал только с памятью из пула что я ему подсунул?

и вообще — годится ли set для небольших деревьях в которых будет до 100 записей и по ним надо будет постоянно искать? (удалять ничё не нужно — только изредка добавлять)

спасибо!
Re: использует ли STL мой аллокатор для всех нужд по выделен
От: Bell Россия  
Дата: 25.03.08 15:54
Оценка:
Здравствуйте, volodyja, Вы писали:

V>хай всем


V>возникла такая задача — мне надо создавать небольшое дерево для поиска в нём данных, выделяя всю память из заранее выделенного пула, который небольшого размера.

V>начал рыть матчасть по аллокаторам, нашел примеры кода, в которых увидел пример использования аллокатора:

V>//! Template typedef std::map<..., PooledAllocator> to PooledList<Key, Value>::Type.

V>template<typename Key, typename Value, class Traits = std::less<Key> >
V>struct PooledMap
V>{
V> typedef std::map<Key, Value, Traits, PooledAllocator<std::pair<Key, Value> > > Type;
V>};

V>тут видно что из пула будут выделяться std::pair<Key, Value>, которые, вроде как, не будут содержать в себе полностью все служебные данные ноды дерева.

V>вопрос — как сделать так чтоб set полностью работал только с памятью из пула что я ему подсунул?

Нормальный аллокатор должен уметь это делать — ищи примеры, их есть.

V>и вообще — годится ли set для небольших деревьях в которых будет до 100 записей и по ним надо будет постоянно искать? (удалять ничё не нужно — только изредка добавлять)


На такой задаче отсортированный вектор (массив) почти со стопроцентной гарантией будет быстрее.
Любите книгу — источник знаний (с) М.Горький
Re: использует ли STL мой аллокатор для всех нужд по выделен
От: remark Россия http://www.1024cores.net/
Дата: 25.03.08 15:59
Оценка:
Здравствуйте, volodyja, Вы писали:

V>тут видно что из пула будут выделяться std::pair<Key, Value>, которые, вроде как, не будут содержать в себе полностью все служебные данные ноды дерева.


Контейнер должен использовать предоставленный аллокатор для всех аллокаций памяти. В аллокаторе есть мета-функция rebind, с помощью который контейнер должен преобразовать аллокатор под аллокацию своих внутренних структур.


V>и вообще — годится ли set для небольших деревьях в которых будет до 100 записей и по ним надо будет постоянно искать? (удалять ничё не нужно — только изредка добавлять)


Отсортированный массив будет быстрее. Ещё быстрее будет хэш-мап (при условии хорошей хэш-функции).



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.