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