Replace QuicUnorderedMap and QuicHashMap with the corresponding Abseil classes.

Chromium has been using Abseil for those since September, so it should be safe
to switch.

PiperOrigin-RevId: 355221659
Change-Id: I0c1006c193554f71745234ba4b90eafc8ff30ed9
diff --git a/quic/core/crypto/proof_source_x509.h b/quic/core/crypto/proof_source_x509.h
index 24975ba..83de1de 100644
--- a/quic/core/crypto/proof_source_x509.h
+++ b/quic/core/crypto/proof_source_x509.h
@@ -9,6 +9,7 @@
 #include <memory>
 
 #include "absl/base/attributes.h"
+#include "absl/container/node_hash_map.h"
 #include "absl/strings/string_view.h"
 #include "quic/core/crypto/certificate_view.h"
 #include "quic/core/crypto/proof_source.h"
@@ -68,7 +69,7 @@
 
   std::forward_list<Certificate> certificates_;
   Certificate* default_certificate_;
-  QuicUnorderedMap<std::string, Certificate*> certificate_map_;
+  absl::node_hash_map<std::string, Certificate*> certificate_map_;
 };
 
 }  // namespace quic
diff --git a/quic/core/crypto/transport_parameters.h b/quic/core/crypto/transport_parameters.h
index f78cd2c..b6ecb69 100644
--- a/quic/core/crypto/transport_parameters.h
+++ b/quic/core/crypto/transport_parameters.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "absl/container/flat_hash_map.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
 #include "quic/core/quic_connection_id.h"
@@ -29,7 +30,7 @@
   // The identifier used to differentiate transport parameters.
   enum TransportParameterId : uint64_t;
   // A map used to specify custom parameters.
-  using ParameterMap = QuicHashMap<TransportParameterId, std::string>;
+  using ParameterMap = absl::flat_hash_map<TransportParameterId, std::string>;
   // Represents an individual QUIC transport parameter that only encodes a
   // variable length integer. Can only be created inside the constructor for
   // TransportParameters.
diff --git a/quic/core/http/http_frames.h b/quic/core/http/http_frames.h
index 6669242..34c3d60 100644
--- a/quic/core/http/http_frames.h
+++ b/quic/core/http/http_frames.h
@@ -11,6 +11,7 @@
 #include <ostream>
 #include <sstream>
 
+#include "absl/container/flat_hash_map.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "quic/core/http/http_constants.h"
@@ -70,7 +71,7 @@
 //   affect how endpoints communicate, such as preferences and constraints
 //   on peer behavior
 
-using SettingsMap = QuicHashMap<uint64_t, uint64_t>;
+using SettingsMap = absl::flat_hash_map<uint64_t, uint64_t>;
 
 struct QUIC_EXPORT_PRIVATE SettingsFrame {
   SettingsMap values;
diff --git a/quic/core/http/quic_spdy_client_session_base.h b/quic/core/http/quic_spdy_client_session_base.h
index 01361fd..71236bf 100644
--- a/quic/core/http/quic_spdy_client_session_base.h
+++ b/quic/core/http/quic_spdy_client_session_base.h
@@ -7,6 +7,7 @@
 
 #include <string>
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/core/http/quic_spdy_session.h"
 #include "quic/core/quic_crypto_client_stream.h"
 #include "quic/platform/api/quic_containers.h"
@@ -24,7 +25,8 @@
 // to authority constraints).  Clients should use this map to enforce
 // session affinity for requests corresponding to cross-origin push
 // promised streams.
-using QuicPromisedByUrlMap = QuicHashMap<std::string, QuicClientPromisedInfo*>;
+using QuicPromisedByUrlMap =
+    absl::flat_hash_map<std::string, QuicClientPromisedInfo*>;
 
 // The maximum time a promises stream can be reserved without being
 // claimed by a client request.
@@ -126,7 +128,8 @@
   // For QuicSpdyClientStream to detect that a response corresponds to a
   // promise.
   using QuicPromisedByIdMap =
-      QuicHashMap<QuicStreamId, std::unique_ptr<QuicClientPromisedInfo>>;
+      absl::flat_hash_map<QuicStreamId,
+                          std::unique_ptr<QuicClientPromisedInfo>>;
 
   // As per rfc7540, section 10.5: track promise streams in "reserved
   // (remote)".  The primary key is URL from the promise request
diff --git a/quic/core/http/quic_spdy_session.h b/quic/core/http/quic_spdy_session.h
index cda619b..3c3d558 100644
--- a/quic/core/http/quic_spdy_session.h
+++ b/quic/core/http/quic_spdy_session.h
@@ -9,6 +9,7 @@
 #include <memory>
 #include <string>
 
+#include "absl/container/flat_hash_map.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
 #include "quic/core/http/http_frames.h"
@@ -591,7 +592,7 @@
 
   // Priority values received in PRIORITY_UPDATE frames for streams that are not
   // open yet.
-  QuicHashMap<QuicStreamId, int> buffered_stream_priorities_;
+  absl::flat_hash_map<QuicStreamId, int> buffered_stream_priorities_;
 
   // An integer used for live check. The indicator is assigned a value in
   // constructor. As long as it is not the assigned value, that would indicate
diff --git a/quic/core/qpack/qpack_blocking_manager.h b/quic/core/qpack/qpack_blocking_manager.h
index d8c10f1..70870a6 100644
--- a/quic/core/qpack/qpack_blocking_manager.h
+++ b/quic/core/qpack/qpack_blocking_manager.h
@@ -9,6 +9,7 @@
 #include <map>
 #include <set>
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/core/quic_types.h"
 #include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_export.h"
@@ -77,7 +78,7 @@
   // same time.  Use std::list instead of QuicCircularDeque because it has lower
   // memory footprint when holding few elements.
   using HeaderBlocksForStream = std::list<IndexSet>;
-  using HeaderBlocks = QuicHashMap<QuicStreamId, HeaderBlocksForStream>;
+  using HeaderBlocks = absl::flat_hash_map<QuicStreamId, HeaderBlocksForStream>;
 
   // Increase or decrease the reference count for each index in |indices|.
   void IncreaseReferenceCounts(const IndexSet& indices);
diff --git a/quic/core/quic_dispatcher.h b/quic/core/quic_dispatcher.h
index 14ca07c..4245a5d 100644
--- a/quic/core/quic_dispatcher.h
+++ b/quic/core/quic_dispatcher.h
@@ -13,6 +13,7 @@
 #include <string>
 #include <vector>
 
+#include "absl/container/flat_hash_map.h"
 #include "absl/strings/string_view.h"
 #include "quic/core/crypto/quic_compressed_certs_cache.h"
 #include "quic/core/crypto/quic_random.h"
@@ -119,13 +120,14 @@
   void OnConnectionAddedToTimeWaitList(
       QuicConnectionId server_connection_id) override;
 
-  using SessionMap = QuicHashMap<QuicConnectionId,
-                                 std::unique_ptr<QuicSession>,
-                                 QuicConnectionIdHash>;
+  using SessionMap = absl::flat_hash_map<QuicConnectionId,
+                                         std::unique_ptr<QuicSession>,
+                                         QuicConnectionIdHash>;
 
-  using ReferenceCountedSessionMap = QuicHashMap<QuicConnectionId,
-                                                 std::shared_ptr<QuicSession>,
-                                                 QuicConnectionIdHash>;
+  using ReferenceCountedSessionMap =
+      absl::flat_hash_map<QuicConnectionId,
+                          std::shared_ptr<QuicSession>,
+                          QuicConnectionIdHash>;
 
   size_t NumSessions() const;
 
@@ -134,8 +136,8 @@
   // Deletes all sessions on the closed session list and clears the list.
   virtual void DeleteSessions();
 
-  using ConnectionIdMap =
-      QuicHashMap<QuicConnectionId, QuicConnectionId, QuicConnectionIdHash>;
+  using ConnectionIdMap = absl::
+      flat_hash_map<QuicConnectionId, QuicConnectionId, QuicConnectionIdHash>;
 
   // QuicBufferedPacketStore::VisitorInterface implementation.
   void OnExpiredPackets(QuicConnectionId server_connection_id,
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index d9c9b93..cf7f9f7 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -14,6 +14,7 @@
 #include <string>
 #include <vector>
 
+#include "absl/container/flat_hash_map.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
 #include "quic/core/frames/quic_ack_frequency_frame.h"
@@ -612,15 +613,16 @@
   }
 
  protected:
-  using StreamMap = QuicHashMap<QuicStreamId, std::unique_ptr<QuicStream>>;
+  using StreamMap =
+      absl::flat_hash_map<QuicStreamId, std::unique_ptr<QuicStream>>;
 
   using PendingStreamMap =
-      QuicHashMap<QuicStreamId, std::unique_ptr<PendingStream>>;
+      absl::flat_hash_map<QuicStreamId, std::unique_ptr<PendingStream>>;
 
   using ClosedStreams = std::vector<std::unique_ptr<QuicStream>>;
 
   using ZombieStreamMap =
-      QuicHashMap<QuicStreamId, std::unique_ptr<QuicStream>>;
+      absl::flat_hash_map<QuicStreamId, std::unique_ptr<QuicStream>>;
 
   // Creates a new stream to handle a peer-initiated stream.
   // Caller does not own the returned stream.
@@ -833,7 +835,7 @@
 
   // Keep track of highest received byte offset of locally closed streams, while
   // waiting for a definitive final highest offset from the peer.
-  QuicHashMap<QuicStreamId, QuicStreamOffset>
+  absl::flat_hash_map<QuicStreamId, QuicStreamOffset>
       locally_closed_streams_highest_offset_;
 
   QuicConnection* connection_;
diff --git a/quic/core/quic_time_wait_list_manager.h b/quic/core/quic_time_wait_list_manager.h
index 4e685f9..9b3739b 100644
--- a/quic/core/quic_time_wait_list_manager.h
+++ b/quic/core/quic_time_wait_list_manager.h
@@ -11,6 +11,7 @@
 #include <cstddef>
 #include <memory>
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/core/quic_blocked_writer_interface.h"
 #include "quic/core/quic_connection_id.h"
 #include "quic/core/quic_framer.h"
@@ -294,7 +295,7 @@
   // find the entry, look up the cannoical ConnectionId in
   // indirect_connection_id_map_ first, and look up connection_id_map_ with the
   // cannoical ConnectionId.
-  QuicHashMap<QuicConnectionId, QuicConnectionId, QuicConnectionIdHash>
+  absl::flat_hash_map<QuicConnectionId, QuicConnectionId, QuicConnectionIdHash>
       indirect_connection_id_map_;
 
   // Find an iterator for the given connection_id. Returns
diff --git a/quic/masque/masque_client_session.h b/quic/masque/masque_client_session.h
index 4fc531c..0eab5b2 100644
--- a/quic/masque/masque_client_session.h
+++ b/quic/masque/masque_client_session.h
@@ -5,6 +5,7 @@
 #ifndef QUICHE_QUIC_MASQUE_MASQUE_CLIENT_SESSION_H_
 #define QUICHE_QUIC_MASQUE_MASQUE_CLIENT_SESSION_H_
 
+#include "absl/container/flat_hash_map.h"
 #include "absl/strings/string_view.h"
 #include "quic/core/http/quic_spdy_client_session.h"
 #include "quic/masque/masque_compression_engine.h"
@@ -86,9 +87,9 @@
   void UnregisterConnectionId(QuicConnectionId client_connection_id);
 
  private:
-  QuicHashMap<QuicConnectionId,
-              EncapsulatedClientSession*,
-              QuicConnectionIdHash>
+  absl::flat_hash_map<QuicConnectionId,
+                      EncapsulatedClientSession*,
+                      QuicConnectionIdHash>
       client_connection_id_registrations_;
   Owner* owner_;  // Unowned;
   MasqueCompressionEngine compression_engine_;
diff --git a/quic/masque/masque_compression_engine.h b/quic/masque/masque_compression_engine.h
index 1cfc6a1..96c5948 100644
--- a/quic/masque/masque_compression_engine.h
+++ b/quic/masque/masque_compression_engine.h
@@ -5,6 +5,7 @@
 #ifndef QUICHE_QUIC_MASQUE_MASQUE_PROTOCOL_H_
 #define QUICHE_QUIC_MASQUE_MASQUE_PROTOCOL_H_
 
+#include "absl/container/flat_hash_map.h"
 #include "absl/strings/string_view.h"
 #include "quic/core/quic_connection_id.h"
 #include "quic/core/quic_session.h"
@@ -117,7 +118,7 @@
                                bool* version_present);
 
   QuicSession* masque_session_;  // Unowned.
-  QuicHashMap<QuicDatagramFlowId, MasqueCompressionContext> contexts_;
+  absl::flat_hash_map<QuicDatagramFlowId, MasqueCompressionContext> contexts_;
   QuicDatagramFlowId next_flow_id_;
 };
 
diff --git a/quic/masque/masque_dispatcher.h b/quic/masque/masque_dispatcher.h
index 59fc068..2e0186c 100644
--- a/quic/masque/masque_dispatcher.h
+++ b/quic/masque/masque_dispatcher.h
@@ -5,6 +5,7 @@
 #ifndef QUICHE_QUIC_MASQUE_MASQUE_DISPATCHER_H_
 #define QUICHE_QUIC_MASQUE_MASQUE_DISPATCHER_H_
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/masque/masque_server_backend.h"
 #include "quic/masque/masque_server_session.h"
 #include "quic/platform/api/quic_export.h"
@@ -53,7 +54,9 @@
   MasqueServerBackend* masque_server_backend_;  // Unowned.
   // Mapping from client connection IDs to server sessions, allows routing
   // incoming packets to the right MASQUE connection.
-  QuicHashMap<QuicConnectionId, MasqueServerSession*, QuicConnectionIdHash>
+  absl::flat_hash_map<QuicConnectionId,
+                      MasqueServerSession*,
+                      QuicConnectionIdHash>
       client_connection_id_registrations_;
 };
 
diff --git a/quic/masque/masque_server_backend.h b/quic/masque/masque_server_backend.h
index 6fbb623..1809359 100644
--- a/quic/masque/masque_server_backend.h
+++ b/quic/masque/masque_server_backend.h
@@ -5,6 +5,7 @@
 #ifndef QUICHE_QUIC_MASQUE_MASQUE_SERVER_BACKEND_H_
 #define QUICHE_QUIC_MASQUE_MASQUE_SERVER_BACKEND_H_
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/platform/api/quic_export.h"
 #include "quic/tools/quic_memory_cache_backend.h"
 
@@ -57,9 +58,9 @@
       QuicSimpleServerBackend::RequestHandler* request_handler);
 
   std::string server_authority_;
-  QuicHashMap<std::string, std::unique_ptr<QuicBackendResponse>>
+  absl::flat_hash_map<std::string, std::unique_ptr<QuicBackendResponse>>
       active_response_map_;
-  QuicHashMap<QuicConnectionId, BackendClient*, QuicConnectionIdHash>
+  absl::flat_hash_map<QuicConnectionId, BackendClient*, QuicConnectionIdHash>
       backend_clients_;
 };
 
diff --git a/quic/qbone/bonnet/icmp_reachable_test.cc b/quic/qbone/bonnet/icmp_reachable_test.cc
index ae246b7..221e5f6 100644
--- a/quic/qbone/bonnet/icmp_reachable_test.cc
+++ b/quic/qbone/bonnet/icmp_reachable_test.cc
@@ -6,6 +6,7 @@
 
 #include <netinet/ip6.h>
 
+#include "absl/container/node_hash_map.h"
 #include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_epoll.h"
 #include "quic/platform/api/quic_ip_address.h"
@@ -73,8 +74,8 @@
 
   std::string current_source_{};
 
-  QuicUnorderedMap<int, int> read_errors_;
-  QuicUnorderedMap<int, int> write_errors_;
+  absl::node_hash_map<int, int> read_errors_;
+  absl::node_hash_map<int, int> write_errors_;
 };
 
 class IcmpReachableTest : public QuicTest {
diff --git a/quic/test_tools/quic_session_peer.cc b/quic/test_tools/quic_session_peer.cc
index 344b1b1..4a8c8ca 100644
--- a/quic/test_tools/quic_session_peer.cc
+++ b/quic/test_tools/quic_session_peer.cc
@@ -4,6 +4,7 @@
 
 #include "quic/test_tools/quic_session_peer.h"
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/core/quic_session.h"
 #include "quic/core/quic_stream.h"
 #include "quic/core/quic_utils.h"
@@ -120,7 +121,7 @@
 }
 
 // static
-QuicHashMap<QuicStreamId, QuicStreamOffset>&
+absl::flat_hash_map<QuicStreamId, QuicStreamOffset>&
 QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(QuicSession* session) {
   return session->locally_closed_streams_highest_offset_;
 }
diff --git a/quic/test_tools/quic_session_peer.h b/quic/test_tools/quic_session_peer.h
index 66a57a7..94f0bf5 100644
--- a/quic/test_tools/quic_session_peer.h
+++ b/quic/test_tools/quic_session_peer.h
@@ -9,6 +9,7 @@
 #include <map>
 #include <memory>
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/core/quic_packets.h"
 #include "quic/core/quic_session.h"
 #include "quic/core/quic_write_blocked_list.h"
@@ -54,7 +55,7 @@
   static QuicWriteBlockedList* GetWriteBlockedStreams(QuicSession* session);
   static QuicStream* GetOrCreateStream(QuicSession* session,
                                        QuicStreamId stream_id);
-  static QuicHashMap<QuicStreamId, QuicStreamOffset>&
+  static absl::flat_hash_map<QuicStreamId, QuicStreamOffset>&
   GetLocallyClosedStreamsHighestOffset(QuicSession* session);
   static QuicSession::StreamMap& stream_map(QuicSession* session);
   static const QuicSession::ClosedStreams& closed_streams(QuicSession* session);
diff --git a/quic/test_tools/quic_test_utils.h b/quic/test_tools/quic_test_utils.h
index 7b4b18f..2863ce8 100644
--- a/quic/test_tools/quic_test_utils.h
+++ b/quic/test_tools/quic_test_utils.h
@@ -13,6 +13,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/container/flat_hash_map.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "quic/core/congestion_control/loss_detection_interface.h"
@@ -2239,7 +2240,8 @@
   // Used to verify writer-allocated packet buffers are properly released.
   std::vector<PacketBuffer*> packet_buffer_pool_;
   // Buffer address => Address of the owning PacketBuffer.
-  QuicHashMap<char*, PacketBuffer*> packet_buffer_pool_index_;
+  absl::flat_hash_map<char*, PacketBuffer*, absl::Hash<char*>>
+      packet_buffer_pool_index_;
   // Indices in packet_buffer_pool_ that are not allocated.
   std::list<PacketBuffer*> packet_buffer_free_list_;
   // The soruce/peer address passed into WritePacket().
diff --git a/quic/test_tools/simple_data_producer.h b/quic/test_tools/simple_data_producer.h
index 0d6182e..82021e1 100644
--- a/quic/test_tools/simple_data_producer.h
+++ b/quic/test_tools/simple_data_producer.h
@@ -5,6 +5,7 @@
 #ifndef QUICHE_QUIC_TEST_TOOLS_SIMPLE_DATA_PRODUCER_H_
 #define QUICHE_QUIC_TEST_TOOLS_SIMPLE_DATA_PRODUCER_H_
 
+#include "absl/container/flat_hash_map.h"
 #include "absl/strings/string_view.h"
 #include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_stream_frame_data_producer.h"
@@ -59,12 +60,12 @@
 
  private:
   using SendBufferMap =
-      QuicHashMap<QuicStreamId, std::unique_ptr<QuicStreamSendBuffer>>;
+      absl::flat_hash_map<QuicStreamId, std::unique_ptr<QuicStreamSendBuffer>>;
 
   using CryptoBufferMap =
-      QuicHashMap<std::pair<EncryptionLevel, QuicStreamOffset>,
-                  absl::string_view,
-                  PairHash>;
+      absl::flat_hash_map<std::pair<EncryptionLevel, QuicStreamOffset>,
+                          absl::string_view,
+                          PairHash>;
 
   SimpleBufferAllocator allocator_;
 
diff --git a/quic/test_tools/simple_session_notifier.h b/quic/test_tools/simple_session_notifier.h
index 5f7d4ae..2219c27 100644
--- a/quic/test_tools/simple_session_notifier.h
+++ b/quic/test_tools/simple_session_notifier.h
@@ -5,6 +5,7 @@
 #ifndef QUICHE_QUIC_TEST_TOOLS_SIMPLE_SESSION_NOTIFIER_H_
 #define QUICHE_QUIC_TEST_TOOLS_SIMPLE_SESSION_NOTIFIER_H_
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/core/quic_circular_deque.h"
 #include "quic/core/quic_interval_set.h"
 #include "quic/core/session_notifier_interface.h"
@@ -106,7 +107,7 @@
 
   friend std::ostream& operator<<(std::ostream& os, const StreamState& s);
 
-  using StreamMap = QuicHashMap<QuicStreamId, StreamState>;
+  using StreamMap = absl::flat_hash_map<QuicStreamId, StreamState>;
 
   void OnStreamDataConsumed(QuicStreamId id,
                             QuicStreamOffset offset,
diff --git a/quic/test_tools/simulator/quic_endpoint_base.h b/quic/test_tools/simulator/quic_endpoint_base.h
index 89e67d7..81b09f1 100644
--- a/quic/test_tools/simulator/quic_endpoint_base.h
+++ b/quic/test_tools/simulator/quic_endpoint_base.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/core/crypto/null_decrypter.h"
 #include "quic/core/crypto/null_encrypter.h"
 #include "quic/core/quic_connection.h"
@@ -150,7 +151,7 @@
   void Act() override {}
 
  private:
-  QuicHashMap<std::string, QuicEndpointBase*> mapping_;
+  absl::flat_hash_map<std::string, QuicEndpointBase*> mapping_;
 };
 
 }  // namespace simulator
diff --git a/quic/test_tools/simulator/simulator.h b/quic/test_tools/simulator/simulator.h
index cd3c9ba..9b73cc3 100644
--- a/quic/test_tools/simulator/simulator.h
+++ b/quic/test_tools/simulator/simulator.h
@@ -7,6 +7,7 @@
 
 #include <map>
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/core/quic_connection.h"
 #include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/platform/api/quic_bug_tracker.h"
@@ -130,7 +131,7 @@
   std::multimap<QuicTime, Actor*> schedule_;
   // For each actor, maintain the time it is scheduled at.  The value for
   // unscheduled actors is QuicTime::Infinite().
-  QuicHashMap<Actor*, QuicTime> scheduled_times_;
+  absl::flat_hash_map<Actor*, QuicTime> scheduled_times_;
   QuicHashSet<std::string> actor_names_;
 };
 
diff --git a/quic/test_tools/simulator/simulator_test.cc b/quic/test_tools/simulator/simulator_test.cc
index c3c05ac..a71649e 100644
--- a/quic/test_tools/simulator/simulator_test.cc
+++ b/quic/test_tools/simulator/simulator_test.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "absl/container/node_hash_map.h"
 #include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_logging.h"
 #include "quic/platform/api/quic_test.h"
@@ -102,7 +103,7 @@
   QuicByteCount bytes_;
   QuicPacketCount packets_;
 
-  QuicUnorderedMap<std::string, QuicPacketCount>
+  absl::node_hash_map<std::string, QuicPacketCount>
       per_destination_packet_counter_;
 };
 
diff --git a/quic/test_tools/simulator/switch.h b/quic/test_tools/simulator/switch.h
index f50df6b..bd4e7b6 100644
--- a/quic/test_tools/simulator/switch.h
+++ b/quic/test_tools/simulator/switch.h
@@ -7,6 +7,7 @@
 
 #include <deque>
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/platform/api/quic_containers.h"
 #include "quic/test_tools/simulator/queue.h"
 
@@ -80,7 +81,7 @@
   // This can not be a QuicCircularDeque since pointers into this are
   // assumed to be stable.
   std::deque<Port> ports_;
-  QuicHashMap<std::string, Port*> switching_table_;
+  absl::flat_hash_map<std::string, Port*> switching_table_;
 };
 
 }  // namespace simulator
diff --git a/quic/test_tools/simulator/traffic_policer.h b/quic/test_tools/simulator/traffic_policer.h
index ea6a5d4..bba2b83 100644
--- a/quic/test_tools/simulator/traffic_policer.h
+++ b/quic/test_tools/simulator/traffic_policer.h
@@ -5,6 +5,7 @@
 #ifndef QUICHE_QUIC_TEST_TOOLS_SIMULATOR_TRAFFIC_POLICER_H_
 #define QUICHE_QUIC_TEST_TOOLS_SIMULATOR_TRAFFIC_POLICER_H_
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/test_tools/simulator/packet_filter.h"
 #include "quic/test_tools/simulator/port.h"
 
@@ -44,7 +45,7 @@
   QuicTime last_refill_time_;
 
   // Maps each destination to the number of tokens it has left.
-  QuicHashMap<std::string, QuicByteCount> token_buckets_;
+  absl::flat_hash_map<std::string, QuicByteCount> token_buckets_;
 };
 
 }  // namespace simulator
diff --git a/quic/tools/quic_memory_cache_backend.h b/quic/tools/quic_memory_cache_backend.h
index 4df670e..5e4b267 100644
--- a/quic/tools/quic_memory_cache_backend.h
+++ b/quic/tools/quic_memory_cache_backend.h
@@ -10,6 +10,7 @@
 #include <memory>
 #include <vector>
 
+#include "absl/container/flat_hash_map.h"
 #include "absl/strings/string_view.h"
 #include "quic/core/http/spdy_utils.h"
 #include "quic/platform/api/quic_containers.h"
@@ -168,8 +169,8 @@
                                  QuicBackendResponse::ServerPushInfo resource);
 
   // Cached responses.
-  QuicHashMap<std::string, std::unique_ptr<QuicBackendResponse>> responses_
-      QUIC_GUARDED_BY(response_mutex_);
+  absl::flat_hash_map<std::string, std::unique_ptr<QuicBackendResponse>>
+      responses_ QUIC_GUARDED_BY(response_mutex_);
 
   // The default response for cache misses, if set.
   std::unique_ptr<QuicBackendResponse> default_response_
diff --git a/quic/tools/quic_tcp_like_trace_converter.h b/quic/tools/quic_tcp_like_trace_converter.h
index d5a1456..b90d455 100644
--- a/quic/tools/quic_tcp_like_trace_converter.h
+++ b/quic/tools/quic_tcp_like_trace_converter.h
@@ -7,6 +7,7 @@
 
 #include <vector>
 
+#include "absl/container/flat_hash_map.h"
 #include "quic/core/frames/quic_stream_frame.h"
 #include "quic/core/quic_interval.h"
 #include "quic/core/quic_interval_set.h"
@@ -73,8 +74,9 @@
                                         StreamInfo* info);
 
   StreamInfo crypto_frames_info_[NUM_ENCRYPTION_LEVELS];
-  QuicHashMap<QuicStreamId, StreamInfo> streams_info_;
-  QuicHashMap<QuicControlFrameId, QuicInterval<uint64_t>> control_frames_info_;
+  absl::flat_hash_map<QuicStreamId, StreamInfo> streams_info_;
+  absl::flat_hash_map<QuicControlFrameId, QuicInterval<uint64_t>>
+      control_frames_info_;
 
   QuicControlFrameId largest_observed_control_frame_id_;