On Tue, 30 Aug 2022 at 21:08, Marek Polacek via Gcc <gcc@gcc.gnu.org> wrote:
>
> On Tue, Aug 30, 2022 at 09:57:45PM +0200, Tim Lange wrote:
> > Hello,
> >
> > I was preparing a patch for GCC and used the unordered_map from the C++
> > stdlib in my patch. Later on, I noticed that it is used nowhere else inside
> > GCC except for some files in the go frontend.
> >
> > I wondered, now that building GCC requires a C++11 host compiler, whether
> > there is a consensus on which data structure implementation is preferred.
> > Should I rather use a hash_map instead of an unordered_map or is it on my
> > side to decide which one I choose?
>
> I think you're probably better off using a hash_map; std::unordered_map
> has efficiency issues as described in
> https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2028r0.pdf

I assume you mean the comments on page 6. Does GCC's hash_map actually
use open addressing and probing to deal with collisions? Do we want to
be able to change the hash function or use per-compilation salts?
(Would that break PCH?) If not, I don't see why it would be any better
when considering the metrics that paper is referring to. It might be
better based on other properties that benefit GCC, but the case
against std::unordered_map is often overstated.

If the question was whether to prefer std::unordered_map or
absl::node_hash_map then I would agree that std::unordered_map is a
bad choice. But that's not the question.

Reply via email to