After all of the discussion, I would like to call for a vote on this policy for hash related containers in ATS 9. This would explicitly *not* apply to concurrent containers.
The containers in ink_hash_table.h (TCL), List.h, Map.h, and Vec.h are deprecated. These should be replaced with one of * std::vector * IntrusiveDList * IntrusiveHashMap * std::map * std::unordered_map * IpMap as seems appropriate for the particular use case. In particular, if memory for objects is managed elsewhere, favor IntrusiveHashMap. If memory management is local, then favor std::unordered_map. For ordered containers, consider if a sorted std::vector would suffice (see std::binary_search). For searchable containers with IP address keys, favor IpMap. As specific examples, if the objects are managed by a ProxyAllocator then IntrusiveHashMap is the better choice. If the objects are being created with new or ats_malloc, then std::unordered_map is the better choice (in which case new/ats_malloc would no longer be used explicitly, memory management would be done by the container). Testing indicates that in usual cases the performance differences are not large enough to determine the choice.