Re: std::map initialization - reserving hashtable size
On Aug 2, 1:57 am, nerdrak...@gmail.com wrote:
I am using the map stl and is there a way I could specify the hash
table size in the map in the beginning - (similar to
vector.reserve(size) ).
std::map doesn't use a hash table, so it's not relevant.
std::map is a node based container, which means that each entry
is a separate allocation. Knowing the size up front couldn't
affect its performance.
Is there a way I could specify the entries at
the beginning.
Yes. Use the two iterator constructor. Something like:
typedef std::map< int, int > Map ;
struct MapInit
{
int key ;
int value ;
operator Map::value_type() const
{
return Map::value_type( key, value ) ;
}
} ;
MapInit const initTable[] =
{
{ 1, 2 },
{ 3, 4 },
// ...
} ;
Map myMap( begin( initTable ), end( initTable ) ) ;
(You'll need the usual begin and end function templates for
this:
template< typename T, size_t N >
T*
begin( T (&array)[ N ] )
{
return array ;
}
template< typename T, size_t N >
T*
end( T (&array)[ N ] )
{
return array + N ;
}
Is there an implementation-independent hint that I could give to
map so that it performs better when I add more entries to it.
If you know where the element is to go, you can tell the map
that when you insert it. This can save a few comparisons.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34