O_oWhy does something like this give me 50 allocations?
I would assume you are seeing the allocations you find problematic because nodes are being created for each bucket.
The exception guarantees of various containers imply certain implementation characteristics. The easiest way to conform to these requirements is to use operations which can't, by definition, raise any exception. Operations on raw pointers--like `std::swap(raw_pointer1, raw_pointer2)' for example--are some of the few operations which can't raise an exception.
The implementation is probably allocating a new scratch node instead of trying to make multiple updates to a complex object infallible.
Soma