diff --git a/quic/core/crypto/crypto_handshake_message.cc b/quic/core/crypto/crypto_handshake_message.cc
index 6dcb989..b591bec 100644
--- a/quic/core/crypto/crypto_handshake_message.cc
+++ b/quic/core/crypto/crypto_handshake_message.cc
@@ -16,7 +16,6 @@
 #include "quic/core/crypto/crypto_utils.h"
 #include "quic/core/quic_socket_address_coder.h"
 #include "quic/core/quic_utils.h"
-#include "quic/platform/api/quic_map_util.h"
 #include "common/quiche_endian.h"
 
 namespace quic {
@@ -171,7 +170,7 @@
 }
 
 bool CryptoHandshakeMessage::HasStringPiece(QuicTag tag) const {
-  return QuicContainsKey(tag_value_map_, tag);
+  return tag_value_map_.find(tag) != tag_value_map_.end();
 }
 
 QuicErrorCode CryptoHandshakeMessage::GetNthValue24(
diff --git a/quic/core/crypto/quic_crypto_client_config.cc b/quic/core/crypto/quic_crypto_client_config.cc
index 3f94e7c..c19798c 100644
--- a/quic/core/crypto/quic_crypto_client_config.cc
+++ b/quic/core/crypto/quic_crypto_client_config.cc
@@ -33,7 +33,6 @@
 #include "quic/platform/api/quic_client_stats.h"
 #include "quic/platform/api/quic_hostname_utils.h"
 #include "quic/platform/api/quic_logging.h"
-#include "quic/platform/api/quic_map_util.h"
 
 namespace quic {
 
@@ -848,7 +847,8 @@
 
   QuicServerId suffix_server_id(canonical_suffixes_[i], server_id.port(),
                                 server_id.privacy_mode_enabled());
-  if (!QuicContainsKey(canonical_server_map_, suffix_server_id)) {
+  if (canonical_server_map_.find(suffix_server_id) ==
+      canonical_server_map_.end()) {
     // This is the first host we've seen which matches the suffix, so make it
     // canonical.
     canonical_server_map_[suffix_server_id] = server_id;
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index 29e1f6b..163377b 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -35,7 +35,6 @@
 #include "quic/core/quic_versions.h"
 #include "quic/platform/api/quic_expect_bug.h"
 #include "quic/platform/api/quic_flags.h"
-#include "quic/platform/api/quic_map_util.h"
 #include "quic/platform/api/quic_test.h"
 #include "quic/test_tools/qpack/qpack_encoder_peer.h"
 #include "quic/test_tools/qpack/qpack_test_utils.h"
@@ -420,7 +419,7 @@
       first_stream_id = QuicUtils::GetCryptoStreamId(transport_version());
     }
     for (QuicStreamId i = first_stream_id; i < 100; i++) {
-      if (!QuicContainsKey(closed_streams_, i)) {
+      if (closed_streams_.find(i) == closed_streams_.end()) {
         EXPECT_FALSE(session_.IsClosedStream(i)) << " stream id: " << i;
       } else {
         EXPECT_TRUE(session_.IsClosedStream(i)) << " stream id: " << i;
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index 57f3e4d..18526a5 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -25,7 +25,6 @@
 #include "quic/core/quic_versions.h"
 #include "quic/core/quic_write_blocked_list.h"
 #include "quic/platform/api/quic_expect_bug.h"
-#include "quic/platform/api/quic_map_util.h"
 #include "quic/platform/api/quic_test.h"
 #include "quic/test_tools/qpack/qpack_test_utils.h"
 #include "quic/test_tools/quic_config_peer.h"
diff --git a/quic/core/legacy_quic_stream_id_manager.cc b/quic/core/legacy_quic_stream_id_manager.cc
index 2ddf4b2..19128ab 100644
--- a/quic/core/legacy_quic_stream_id_manager.cc
+++ b/quic/core/legacy_quic_stream_id_manager.cc
@@ -7,7 +7,6 @@
 #include "quic/core/quic_types.h"
 #include "quic/core/quic_utils.h"
 #include "quic/core/quic_versions.h"
-#include "quic/platform/api/quic_map_util.h"
 
 namespace quic {
 
@@ -125,7 +124,7 @@
   return largest_peer_created_stream_id_ ==
              QuicUtils::GetInvalidStreamId(transport_version_) ||
          id > largest_peer_created_stream_id_ ||
-         QuicContainsKey(available_streams_, id);
+         available_streams_.contains(id);
 }
 
 bool LegacyQuicStreamIdManager::IsIncomingStream(QuicStreamId id) const {
diff --git a/quic/core/quic_buffered_packet_store.cc b/quic/core/quic_buffered_packet_store.cc
index e4d4c97..078e222 100644
--- a/quic/core/quic_buffered_packet_store.cc
+++ b/quic/core/quic_buffered_packet_store.cc
@@ -8,7 +8,6 @@
 
 #include "quic/platform/api/quic_bug_tracker.h"
 #include "quic/platform/api/quic_flags.h"
-#include "quic/platform/api/quic_map_util.h"
 
 namespace quic {
 
@@ -92,15 +91,14 @@
   QUIC_BUG_IF(quic_bug_12410_1, !GetQuicFlag(FLAGS_quic_allow_chlo_buffering))
       << "Shouldn't buffer packets if disabled via flag.";
   QUIC_BUG_IF(quic_bug_12410_2,
-              is_chlo && QuicContainsKey(connections_with_chlo_, connection_id))
+              is_chlo && connections_with_chlo_.contains(connection_id))
       << "Shouldn't buffer duplicated CHLO on connection " << connection_id;
   QUIC_BUG_IF(quic_bug_12410_3, !is_chlo && !alpns.empty())
       << "Shouldn't have an ALPN defined for a non-CHLO packet.";
   QUIC_BUG_IF(quic_bug_12410_4, is_chlo && !version.IsKnown())
       << "Should have version for CHLO packet.";
 
-  const bool is_first_packet =
-      !QuicContainsKey(undecryptable_packets_, connection_id);
+  const bool is_first_packet = !undecryptable_packets_.contains(connection_id);
   if (is_first_packet) {
     if (ShouldNotBufferPacket(is_chlo)) {
       // Drop the packet if the upper limit of undecryptable packets has been
@@ -112,17 +110,16 @@
     undecryptable_packets_.back().second.ietf_quic = ietf_quic;
     undecryptable_packets_.back().second.version = version;
   }
-  QUICHE_CHECK(QuicContainsKey(undecryptable_packets_, connection_id));
+  QUICHE_CHECK(undecryptable_packets_.contains(connection_id));
   BufferedPacketList& queue =
       undecryptable_packets_.find(connection_id)->second;
 
   if (!is_chlo) {
     // If current packet is not CHLO, it might not be buffered because store
     // only buffers certain number of undecryptable packets per connection.
-    size_t num_non_chlo_packets =
-        QuicContainsKey(connections_with_chlo_, connection_id)
-            ? (queue.buffered_packets.size() - 1)
-            : queue.buffered_packets.size();
+    size_t num_non_chlo_packets = connections_with_chlo_.contains(connection_id)
+                                      ? (queue.buffered_packets.size() - 1)
+                                      : queue.buffered_packets.size();
     if (num_non_chlo_packets >= kDefaultMaxUndecryptablePackets) {
       // If there are kMaxBufferedPacketsPerConnection packets buffered up for
       // this connection, drop the current packet.
@@ -169,7 +166,7 @@
 
 bool QuicBufferedPacketStore::HasBufferedPackets(
     QuicConnectionId connection_id) const {
-  return QuicContainsKey(undecryptable_packets_, connection_id);
+  return undecryptable_packets_.contains(connection_id);
 }
 
 bool QuicBufferedPacketStore::HasChlosBuffered() const {
@@ -254,7 +251,7 @@
 
 bool QuicBufferedPacketStore::HasChloForConnection(
     QuicConnectionId connection_id) {
-  return QuicContainsKey(connections_with_chlo_, connection_id);
+  return connections_with_chlo_.contains(connection_id);
 }
 
 bool QuicBufferedPacketStore::IngestPacketForTlsChloExtraction(
diff --git a/quic/core/quic_control_frame_manager.cc b/quic/core/quic_control_frame_manager.cc
index f41a356..4286249 100644
--- a/quic/core/quic_control_frame_manager.cc
+++ b/quic/core/quic_control_frame_manager.cc
@@ -17,7 +17,6 @@
 #include "quic/core/quic_utils.h"
 #include "quic/platform/api/quic_bug_tracker.h"
 #include "quic/platform/api/quic_flag_utils.h"
-#include "quic/platform/api/quic_map_util.h"
 
 namespace quic {
 
@@ -167,14 +166,14 @@
   }
   if (frame.type == WINDOW_UPDATE_FRAME) {
     QuicStreamId stream_id = frame.window_update_frame->stream_id;
-    if (QuicContainsKey(window_update_frames_, stream_id) &&
+    if (window_update_frames_.contains(stream_id) &&
         id > window_update_frames_[stream_id]) {
       // Consider the older window update of the same stream as acked.
       OnControlFrameIdAcked(window_update_frames_[stream_id]);
     }
     window_update_frames_[stream_id] = id;
   }
-  if (QuicContainsKey(pending_retransmissions_, id)) {
+  if (pending_retransmissions_.contains(id)) {
     // This is retransmitted control frame.
     pending_retransmissions_.erase(id);
     return;
@@ -197,7 +196,7 @@
   }
   if (frame.type == WINDOW_UPDATE_FRAME) {
     QuicStreamId stream_id = frame.window_update_frame->stream_id;
-    if (QuicContainsKey(window_update_frames_, stream_id) &&
+    if (window_update_frames_.contains(stream_id) &&
         window_update_frames_[stream_id] == id) {
       window_update_frames_.erase(stream_id);
     }
@@ -223,7 +222,7 @@
     // This frame has already been acked.
     return;
   }
-  if (!QuicContainsKey(pending_retransmissions_, id)) {
+  if (!pending_retransmissions_.contains(id)) {
     pending_retransmissions_[id] = true;
     QUIC_BUG_IF(quic_bug_12727_2,
                 pending_retransmissions_.size() > control_frames_.size())
diff --git a/quic/core/quic_framer.cc b/quic/core/quic_framer.cc
index d0d5485..bc10b50 100644
--- a/quic/core/quic_framer.cc
+++ b/quic/core/quic_framer.cc
@@ -47,7 +47,6 @@
 #include "quic/platform/api/quic_flag_utils.h"
 #include "quic/platform/api/quic_flags.h"
 #include "quic/platform/api/quic_logging.h"
-#include "quic/platform/api/quic_map_util.h"
 #include "quic/platform/api/quic_stack_trace.h"
 #include "common/quiche_text_utils.h"
 
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc
index 42ab32a..934ee0c 100644
--- a/quic/core/quic_sent_packet_manager.cc
+++ b/quic/core/quic_sent_packet_manager.cc
@@ -24,7 +24,6 @@
 #include "quic/platform/api/quic_flag_utils.h"
 #include "quic/platform/api/quic_flags.h"
 #include "quic/platform/api/quic_logging.h"
-#include "quic/platform/api/quic_map_util.h"
 
 namespace quic {
 
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 1bcb9dc..3c0b964 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -22,7 +22,6 @@
 #include "quic/platform/api/quic_flag_utils.h"
 #include "quic/platform/api/quic_flags.h"
 #include "quic/platform/api/quic_logging.h"
-#include "quic/platform/api/quic_map_util.h"
 #include "quic/platform/api/quic_server_stats.h"
 #include "quic/platform/api/quic_stack_trace.h"
 #include "common/quiche_text_utils.h"
@@ -739,8 +738,8 @@
     return GetCryptoStream()->HasPendingCryptoRetransmission() ||
            GetCryptoStream()->HasBufferedCryptoFrames();
   }
-  return QuicContainsKey(streams_with_pending_retransmission_,
-                         QuicUtils::GetCryptoStreamId(transport_version())) ||
+  return streams_with_pending_retransmission_.contains(
+             QuicUtils::GetCryptoStreamId(transport_version())) ||
          write_blocked_streams_.IsStreamBlocked(
              QuicUtils::GetCryptoStreamId(transport_version()));
 }
@@ -1817,7 +1816,7 @@
   bool is_static = stream->is_static();
   QUIC_DVLOG(1) << ENDPOINT << "num_streams: " << stream_map_.size()
                 << ". activating stream " << stream_id;
-  QUICHE_DCHECK(!QuicContainsKey(stream_map_, stream_id));
+  QUICHE_DCHECK(!stream_map_.contains(stream_id));
   stream_map_[stream_id] = std::move(stream);
   if (is_static) {
     ++num_static_streams_;
@@ -1897,7 +1896,7 @@
 }
 
 QuicStream* QuicSession::GetOrCreateStream(const QuicStreamId stream_id) {
-  QUICHE_DCHECK(!QuicContainsKey(pending_stream_map_, stream_id));
+  QUICHE_DCHECK(!pending_stream_map_.contains(stream_id));
   if (QuicUtils::IsCryptoStreamId(transport_version(), stream_id)) {
     return GetMutableCryptoStream();
   }
@@ -1936,7 +1935,7 @@
 }
 
 void QuicSession::StreamDraining(QuicStreamId stream_id, bool unidirectional) {
-  QUICHE_DCHECK(QuicContainsKey(stream_map_, stream_id));
+  QUICHE_DCHECK(stream_map_.contains(stream_id));
   QUIC_DVLOG(1) << ENDPOINT << "Stream " << stream_id << " is draining";
   if (VersionHasIetfQuicFrames(transport_version())) {
     ietf_streamid_manager_.OnStreamClosed(stream_id);
@@ -2052,7 +2051,7 @@
   if (it != stream_map_.end()) {
     return !it->second->IsZombie();
   }
-  if (QuicContainsKey(pending_stream_map_, id) ||
+  if (pending_stream_map_.contains(id) ||
       QuicUtils::IsCryptoStreamId(transport_version(), id)) {
     // Stream is active
     return true;
@@ -2272,8 +2271,8 @@
                             frame.stream_frame.data_length,
                             frame.stream_frame.fin);
   if (stream->HasPendingRetransmission() &&
-      !QuicContainsKey(streams_with_pending_retransmission_,
-                       frame.stream_frame.stream_id)) {
+      !streams_with_pending_retransmission_.contains(
+          frame.stream_frame.stream_id)) {
     streams_with_pending_retransmission_.insert(
         std::make_pair(frame.stream_frame.stream_id, true));
   }
@@ -2397,8 +2396,8 @@
   }
   // Retransmit crypto data in stream 1 frames (version < 47).
   if (!uses_crypto_frames &&
-      QuicContainsKey(streams_with_pending_retransmission_,
-                      QuicUtils::GetCryptoStreamId(transport_version()))) {
+      streams_with_pending_retransmission_.contains(
+          QuicUtils::GetCryptoStreamId(transport_version()))) {
     // Retransmit crypto data first.
     QuicStream* crypto_stream =
         GetStream(QuicUtils::GetCryptoStreamId(transport_version()));
diff --git a/quic/core/quic_session_test.cc b/quic/core/quic_session_test.cc
index 81282fe..a79f5ba 100644
--- a/quic/core/quic_session_test.cc
+++ b/quic/core/quic_session_test.cc
@@ -27,7 +27,6 @@
 #include "quic/core/quic_versions.h"
 #include "quic/platform/api/quic_expect_bug.h"
 #include "quic/platform/api/quic_flags.h"
-#include "quic/platform/api/quic_map_util.h"
 #include "quic/platform/api/quic_mem_slice_storage.h"
 #include "quic/platform/api/quic_test.h"
 #include "quic/platform/api/quic_test_mem_slice_vector.h"
@@ -452,7 +451,7 @@
           QuicUtils::GetCryptoStreamId(connection_->transport_version());
     }
     for (QuicStreamId i = first_stream_id; i < 100; i++) {
-      if (!QuicContainsKey(closed_streams_, i)) {
+      if (closed_streams_.find(i) == closed_streams_.end()) {
         EXPECT_FALSE(session_.IsClosedStream(i)) << " stream id: " << i;
       } else {
         EXPECT_TRUE(session_.IsClosedStream(i)) << " stream id: " << i;
@@ -2507,7 +2506,7 @@
   EXPECT_TRUE(stream2->IsWaitingForAcks());
   // Verify stream2 is a zombie streams.
   auto& stream_map = QuicSessionPeer::stream_map(&session_);
-  ASSERT_TRUE(QuicContainsKey(stream_map, stream2->id()));
+  ASSERT_TRUE(stream_map.contains(stream2->id()));
   auto* stream = stream_map.find(stream2->id())->second.get();
   EXPECT_TRUE(stream->IsZombie());
 
@@ -2556,7 +2555,7 @@
   stream4->WriteOrBufferData(body, false, nullptr);
   stream4->WriteOrBufferData(body, true, nullptr);
   auto& stream_map = QuicSessionPeer::stream_map(&session_);
-  ASSERT_TRUE(QuicContainsKey(stream_map, stream4->id()));
+  ASSERT_TRUE(stream_map.contains(stream4->id()));
   auto* stream = stream_map.find(stream4->id())->second.get();
   EXPECT_TRUE(stream->IsZombie());
 }
diff --git a/quic/core/quic_stream_id_manager.cc b/quic/core/quic_stream_id_manager.cc
index 0556212..40aa3d0 100644
--- a/quic/core/quic_stream_id_manager.cc
+++ b/quic/core/quic_stream_id_manager.cc
@@ -217,7 +217,7 @@
   return largest_peer_created_stream_id_ ==
              QuicUtils::GetInvalidStreamId(version_.transport_version) ||
          id > largest_peer_created_stream_id_ ||
-         QuicContainsKey(available_streams_, id);
+         available_streams_.contains(id);
 }
 
 QuicStreamId QuicStreamIdManager::GetFirstOutgoingStreamId() const {
diff --git a/quic/core/quic_time_wait_list_manager.cc b/quic/core/quic_time_wait_list_manager.cc
index dbaa38b..12f5ef9 100644
--- a/quic/core/quic_time_wait_list_manager.cc
+++ b/quic/core/quic_time_wait_list_manager.cc
@@ -22,7 +22,6 @@
 #include "quic/platform/api/quic_flag_utils.h"
 #include "quic/platform/api/quic_flags.h"
 #include "quic/platform/api/quic_logging.h"
-#include "quic/platform/api/quic_map_util.h"
 #include "quic/platform/api/quic_socket_address.h"
 #include "common/quiche_text_utils.h"
 
@@ -174,7 +173,7 @@
   if (use_indirect_connection_id_map_) {
     return indirect_connection_id_map_.contains(connection_id);
   }
-  return QuicContainsKey(connection_id_map_, connection_id);
+  return connection_id_map_.contains(connection_id);
 }
 
 void QuicTimeWaitListManager::OnBlockedWriterCanWrite() {
diff --git a/quic/core/quic_write_blocked_list.h b/quic/core/quic_write_blocked_list.h
index dbc2ca9..78efbad 100644
--- a/quic/core/quic_write_blocked_list.h
+++ b/quic/core/quic_write_blocked_list.h
@@ -15,7 +15,6 @@
 #include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_export.h"
 #include "quic/platform/api/quic_flags.h"
-#include "quic/platform/api/quic_map_util.h"
 
 namespace quic {
 
diff --git a/quic/platform/api/quic_map_util.h b/quic/platform/api/quic_map_util.h
deleted file mode 100644
index f07086b..0000000
--- a/quic/platform/api/quic_map_util.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef QUICHE_QUIC_PLATFORM_API_QUIC_MAP_UTIL_H_
-#define QUICHE_QUIC_PLATFORM_API_QUIC_MAP_UTIL_H_
-
-#include "net/quic/platform/impl/quic_map_util_impl.h"
-
-namespace quic {
-
-template <class Collection, class Key>
-bool QuicContainsKey(const Collection& collection, const Key& key) {
-  return QuicContainsKeyImpl(collection, key);
-}
-
-}  // namespace quic
-
-#endif  // QUICHE_QUIC_PLATFORM_API_QUIC_MAP_UTIL_H_
diff --git a/quic/test_tools/quic_framer_peer.cc b/quic/test_tools/quic_framer_peer.cc
index 14cc594..8692a25 100644
--- a/quic/test_tools/quic_framer_peer.cc
+++ b/quic/test_tools/quic_framer_peer.cc
@@ -6,7 +6,6 @@
 
 #include "quic/core/quic_framer.h"
 #include "quic/core/quic_packets.h"
-#include "quic/platform/api/quic_map_util.h"
 
 namespace quic {
 namespace test {
diff --git a/quic/test_tools/quic_session_peer.cc b/quic/test_tools/quic_session_peer.cc
index a3dbf84..e734a79 100644
--- a/quic/test_tools/quic_session_peer.cc
+++ b/quic/test_tools/quic_session_peer.cc
@@ -8,7 +8,6 @@
 #include "quic/core/quic_session.h"
 #include "quic/core/quic_stream.h"
 #include "quic/core/quic_utils.h"
-#include "quic/platform/api/quic_map_util.h"
 
 namespace quic {
 namespace test {
@@ -152,24 +151,20 @@
 
 // static
 bool QuicSessionPeer::IsStreamCreated(QuicSession* session, QuicStreamId id) {
-  return QuicContainsKey(session->stream_map_, id);
+  return session->stream_map_.contains(id);
 }
 
 // static
 bool QuicSessionPeer::IsStreamAvailable(QuicSession* session, QuicStreamId id) {
   if (VersionHasIetfQuicFrames(session->transport_version())) {
     if (id % QuicUtils::StreamIdDelta(session->transport_version()) < 2) {
-      return QuicContainsKey(
-          session->ietf_streamid_manager_.bidirectional_stream_id_manager_
-              .available_streams_,
-          id);
+      return session->ietf_streamid_manager_.bidirectional_stream_id_manager_
+          .available_streams_.contains(id);
     }
-    return QuicContainsKey(
-        session->ietf_streamid_manager_.unidirectional_stream_id_manager_
-            .available_streams_,
-        id);
+    return session->ietf_streamid_manager_.unidirectional_stream_id_manager_
+        .available_streams_.contains(id);
   }
-  return QuicContainsKey(session->stream_id_manager_.available_streams_, id);
+  return session->stream_id_manager_.available_streams_.contains(id);
 }
 
 // static
diff --git a/quic/test_tools/quic_test_client.cc b/quic/test_tools/quic_test_client.cc
index 7cc3ff9..bc1142d 100644
--- a/quic/test_tools/quic_test_client.cc
+++ b/quic/test_tools/quic_test_client.cc
@@ -786,7 +786,7 @@
   // written.
   client()->OnClose(stream);
   ++num_responses_;
-  if (!QuicContainsKey(open_streams_, stream->id())) {
+  if (open_streams_.find(stream->id()) == open_streams_.end()) {
     return;
   }
   if (latest_created_stream_ == stream) {
diff --git a/quic/test_tools/quic_test_client.h b/quic/test_tools/quic_test_client.h
index d764ca9..e498e8e 100644
--- a/quic/test_tools/quic_test_client.h
+++ b/quic/test_tools/quic_test_client.h
@@ -16,7 +16,6 @@
 #include "quic/core/quic_packets.h"
 #include "quic/platform/api/quic_containers.h"
 #include "quic/platform/api/quic_epoll.h"
-#include "quic/platform/api/quic_map_util.h"
 #include "quic/platform/api/quic_test.h"
 #include "quic/tools/quic_client.h"
 
diff --git a/quic/test_tools/simple_data_producer.cc b/quic/test_tools/simple_data_producer.cc
index 5ef53f4..413a840 100644
--- a/quic/test_tools/simple_data_producer.cc
+++ b/quic/test_tools/simple_data_producer.cc
@@ -10,7 +10,6 @@
 #include "quic/core/quic_data_writer.h"
 #include "quic/platform/api/quic_bug_tracker.h"
 #include "quic/platform/api/quic_flags.h"
-#include "quic/platform/api/quic_map_util.h"
 
 namespace quic {
 
@@ -28,7 +27,7 @@
   if (data_length == 0) {
     return;
   }
-  if (!QuicContainsKey(send_buffer_map_, id)) {
+  if (!send_buffer_map_.contains(id)) {
     send_buffer_map_[id] = std::make_unique<QuicStreamSendBuffer>(&allocator_);
   }
   send_buffer_map_[id]->SaveStreamData(iov, iov_count, iov_offset, data_length);
diff --git a/quic/test_tools/simple_session_notifier.cc b/quic/test_tools/simple_session_notifier.cc
index 51d4017..62ab05a 100644
--- a/quic/test_tools/simple_session_notifier.cc
+++ b/quic/test_tools/simple_session_notifier.cc
@@ -6,7 +6,6 @@
 
 #include "quic/core/quic_utils.h"
 #include "quic/platform/api/quic_logging.h"
-#include "quic/platform/api/quic_map_util.h"
 #include "quic/test_tools/quic_test_utils.h"
 
 namespace quic {
@@ -40,7 +39,7 @@
     QuicStreamId id,
     QuicByteCount data_length,
     StreamSendingState state) {
-  if (!QuicContainsKey(stream_map_, id)) {
+  if (!stream_map_.contains(id)) {
     stream_map_[id] = StreamState();
   }
   StreamState& stream_state = stream_map_.find(id)->second;
@@ -263,7 +262,7 @@
   if (frame.type != STREAM_FRAME) {
     return OnControlFrameAcked(frame);
   }
-  if (!QuicContainsKey(stream_map_, frame.stream_frame.stream_id)) {
+  if (!stream_map_.contains(frame.stream_frame.stream_id)) {
     return false;
   }
   auto* state = &stream_map_.find(frame.stream_frame.stream_id)->second;
@@ -304,7 +303,7 @@
     OnControlFrameLost(frame);
     return;
   }
-  if (!QuicContainsKey(stream_map_, frame.stream_frame.stream_id)) {
+  if (!stream_map_.contains(frame.stream_frame.stream_id)) {
     return;
   }
   auto* state = &stream_map_.find(frame.stream_frame.stream_id)->second;
@@ -359,7 +358,7 @@
       }
       continue;
     }
-    if (!QuicContainsKey(stream_map_, frame.stream_frame.stream_id)) {
+    if (!stream_map_.contains(frame.stream_frame.stream_id)) {
       continue;
     }
     const auto& state = stream_map_.find(frame.stream_frame.stream_id)->second;
@@ -437,7 +436,7 @@
   if (frame.type != STREAM_FRAME) {
     return IsControlFrameOutstanding(frame);
   }
-  if (!QuicContainsKey(stream_map_, frame.stream_frame.stream_id)) {
+  if (!stream_map_.contains(frame.stream_frame.stream_id)) {
     return false;
   }
   const auto& state = stream_map_.find(frame.stream_frame.stream_id)->second;
@@ -463,8 +462,8 @@
     }
     return false;
   }
-  if (!QuicContainsKey(stream_map_, QuicUtils::GetCryptoStreamId(
-                                        connection_->transport_version()))) {
+  if (!stream_map_.contains(
+          QuicUtils::GetCryptoStreamId(connection_->transport_version()))) {
     return false;
   }
   const auto& state =
@@ -521,7 +520,7 @@
           kInvalidControlFrameId) {
     return;
   }
-  if (!QuicContainsKey(lost_control_frames_, id)) {
+  if (!lost_control_frames_.contains(id)) {
     lost_control_frames_[id] = true;
   }
 }
@@ -584,8 +583,8 @@
     }
     return true;
   }
-  if (!QuicContainsKey(stream_map_, QuicUtils::GetCryptoStreamId(
-                                        connection_->transport_version()))) {
+  if (!stream_map_.contains(
+          QuicUtils::GetCryptoStreamId(connection_->transport_version()))) {
     return true;
   }
   auto& state =
@@ -701,7 +700,7 @@
 }
 
 bool SimpleSessionNotifier::StreamIsWaitingForAcks(QuicStreamId id) const {
-  if (!QuicContainsKey(stream_map_, id)) {
+  if (!stream_map_.contains(id)) {
     return false;
   }
   const StreamState& state = stream_map_.find(id)->second;
@@ -710,7 +709,7 @@
 }
 
 bool SimpleSessionNotifier::StreamHasBufferedData(QuicStreamId id) const {
-  if (!QuicContainsKey(stream_map_, id)) {
+  if (!stream_map_.contains(id)) {
     return false;
   }
   const StreamState& state = stream_map_.find(id)->second;
diff --git a/quic/tools/quic_memory_cache_backend.cc b/quic/tools/quic_memory_cache_backend.cc
index de20648..120c2b7 100644
--- a/quic/tools/quic_memory_cache_backend.cc
+++ b/quic/tools/quic_memory_cache_backend.cc
@@ -14,7 +14,6 @@
 #include "quic/platform/api/quic_bug_tracker.h"
 #include "quic/platform/api/quic_file_utils.h"
 #include "quic/platform/api/quic_logging.h"
-#include "quic/platform/api/quic_map_util.h"
 #include "quic/tools/web_transport_test_visitors.h"
 #include "common/quiche_text_utils.h"
 
@@ -414,7 +413,7 @@
   QUICHE_DCHECK(!host.empty())
       << "Host must be populated, e.g. \"www.google.com\"";
   std::string key = GetKey(host, path);
-  if (QuicContainsKey(responses_, key)) {
+  if (responses_.contains(key)) {
     QUIC_BUG(quic_bug_10932_3)
         << "Response for '" << key << "' already exists!";
     return;
@@ -468,7 +467,7 @@
     bool found_existing_response = false;
     {
       QuicWriterMutexLock lock(&response_mutex_);
-      found_existing_response = QuicContainsKey(responses_, GetKey(host, path));
+      found_existing_response = responses_.contains(GetKey(host, path));
     }
     if (!found_existing_response) {
       // Add a server push response to responses map, if it is not in the map.
