diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index fd14ec2..de6361e 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -45,7 +45,6 @@
 #include "quic/platform/api/quic_flags.h"
 #include "quic/platform/api/quic_hostname_utils.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_socket_address.h"
 #include "common/quiche_text_utils.h"
@@ -858,7 +857,8 @@
       framer_.supported_versions();
   for (size_t i = 0; i < supported_versions.size(); ++i) {
     const ParsedQuicVersion& version = supported_versions[i];
-    if (QuicContainsValue(available_versions, version)) {
+    if (std::find(available_versions.begin(), available_versions.end(),
+                  version) != available_versions.end()) {
       framer_.set_version(version);
       return true;
     }
@@ -942,7 +942,8 @@
     return;
   }
 
-  if (QuicContainsValue(packet.versions, version())) {
+  if (std::find(packet.versions.begin(), packet.versions.end(), version()) !=
+      packet.versions.end()) {
     const std::string error_details = absl::StrCat(
         "Server already supports client's version ",
         ParsedQuicVersionToString(version()),
diff --git a/quic/platform/api/quic_map_util.h b/quic/platform/api/quic_map_util.h
index 95daec8..f07086b 100644
--- a/quic/platform/api/quic_map_util.h
+++ b/quic/platform/api/quic_map_util.h
@@ -14,11 +14,6 @@
   return QuicContainsKeyImpl(collection, key);
 }
 
-template <typename Collection, typename Value>
-bool QuicContainsValue(const Collection& collection, const Value& value) {
-  return QuicContainsValueImpl(collection, value);
-}
-
 }  // namespace quic
 
 #endif  // QUICHE_QUIC_PLATFORM_API_QUIC_MAP_UTIL_H_
diff --git a/quic/tools/quic_client_base.cc b/quic/tools/quic_client_base.cc
index 53c6800..6d10de2 100644
--- a/quic/tools/quic_client_base.cc
+++ b/quic/tools/quic_client_base.cc
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 #include "quic/tools/quic_client_base.h"
+
+#include <algorithm>
 #include <memory>
 
 #include "quic/core/crypto/quic_random.h"
@@ -442,13 +444,20 @@
 bool QuicClientBase::CanReconnectWithDifferentVersion(
     ParsedQuicVersion* version) const {
   if (session_ == nullptr || session_->connection() == nullptr ||
-      session_->error() != QUIC_INVALID_VERSION ||
-      session_->connection()->server_supported_versions().empty()) {
+      session_->error() != QUIC_INVALID_VERSION) {
     return false;
   }
+
+  const auto& server_supported_versions =
+      session_->connection()->server_supported_versions();
+  if (server_supported_versions.empty()) {
+    return false;
+  }
+
   for (const auto& client_version : supported_versions_) {
-    if (QuicContainsValue(session_->connection()->server_supported_versions(),
-                          client_version)) {
+    if (std::find(server_supported_versions.begin(),
+                  server_supported_versions.end(),
+                  client_version) != server_supported_versions.end()) {
       *version = client_version;
       return true;
     }
