为什么hash_map无法使用初始化的bucket?该怎么处理

为什么hash_map无法使用初始化的bucket?hash_mapconstint,foo,hash int ,compare_inthmap(100)初始了

为什么hash_map无法使用初始化的bucket?
hash_map   <const   int,   foo,   hash <int> ,   compare_int   >   hmap(100);
初始了100个buckets,从内存分配过程上看这个hmap也申请了一块内存。
但是执行
hmap[1]=foo;时,发现又再分配新的内存,根本没有使用到事前申请的那一块。

分析hash_map的源代码后发现,插入新的对像执行的是以下代码
const   size_type   __n   =   _M_bkt_num(__obj);
    _Node*   __first   =   (_Node*)_M_buckets[__n];
__fisrt是取得的以前的buckts

下面的for是判断有无相同的KEY,
    for   (_Node*   __cur   =   __first;   __cur;   __cur   =   __cur-> _M_next)  
        if   (_M_equals(_M_get_key(__cur-> _M_val),   _M_get_key(__obj)))   {
            _Node*   __tmp   =   _M_new_node(__obj);
            __tmp-> _M_next   =   __cur-> _M_next;
            __cur-> _M_next   =   __tmp;
            ++_M_num_elements._M_data;
            return   iterator(__tmp,   this);
        }
如果是没有相同的KEY值,无论bucket用完否,都是执行这一句,分配一个新的内存节点。
    _Node*   __tmp   =   _M_new_node(__obj);
    __tmp-> _M_next   =   __first;
    _M_buckets[__n]   =   __tmp;
    ++_M_num_elements._M_data;
    return   iterator(__tmp,   this);

在STLport   SGI的源代码是,都是这样的。
请问STL高手这是怎么回事呢?

[解决办法]
看《STL源码剖析》吧,你对bucket的理解恐怕有问题。
P253
[解决办法]
bucket只是每个相同hash值的链表表头。所以bucket的数目只决定hash性能,和节点分配无关。
只要hash_map需要插入一个节点(当出现一个新的key时),就会分配一块节点内存,所以没有办法通过调用hash_map的接口事先分配的。
如果必须事先分配,可以考虑为它专门写一个alloc类,并设置为模版参数。hash_map将使用这个类来为节点分配内存,从而使你有机会修改内存分配策略。