Use Abseil container algorithms in rtc_base/

Bug: None
Change-Id: I4499adaf8e777d570a3bc119ee29727ab7c790a5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/128962
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27271}
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 35f1f61..27a7471 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -620,6 +620,7 @@
     ":checks",
     ":rtc_base_approved",
     ":safe_compare",
+    "//third_party/abseil-cpp/absl/algorithm:container",
     "//third_party/abseil-cpp/absl/types:optional",
   ]
 }
@@ -800,6 +801,7 @@
     "system:file_wrapper",
     "third_party/base64",
     "third_party/sigslot",
+    "//third_party/abseil-cpp/absl/algorithm:container",
     "//third_party/abseil-cpp/absl/memory",
     "//third_party/abseil-cpp/absl/strings",
     "//third_party/abseil-cpp/absl/types:optional",
@@ -1107,6 +1109,7 @@
     ":rtc_base",
     "../api/units:time_delta",
     "third_party/sigslot",
+    "//third_party/abseil-cpp/absl/algorithm:container",
     "//third_party/abseil-cpp/absl/memory",
   ]
 }
@@ -1340,6 +1343,7 @@
       ":rtc_base_tests_main",
       ":rtc_numerics",
       "../test:test_support",
+      "//third_party/abseil-cpp/absl/algorithm:container",
     ]
   }
 
@@ -1414,6 +1418,7 @@
       "../test:test_support",
       "synchronization:synchronization_unittests",
       "third_party/sigslot",
+      "//third_party/abseil-cpp/absl/algorithm:container",
       "//third_party/abseil-cpp/absl/memory",
       "//third_party/abseil-cpp/absl/types:optional",
     ]
diff --git a/rtc_base/file_rotating_stream.cc b/rtc_base/file_rotating_stream.cc
index 86b852f..80c9edf 100644
--- a/rtc_base/file_rotating_stream.cc
+++ b/rtc_base/file_rotating_stream.cc
@@ -10,7 +10,6 @@
 
 #include "rtc_base/file_rotating_stream.h"
 
-#include <algorithm>
 #include <cstdio>
 #include <string>
 #include <utility>
@@ -24,6 +23,7 @@
 #include <unistd.h>
 #endif  // WEBRTC_WIN
 
+#include "absl/algorithm/container.h"
 #include "absl/strings/match.h"
 #include "absl/types/optional.h"
 #include "rtc_base/checks.h"
@@ -391,8 +391,7 @@
 
   // Plain sort of the file names would sort by age, i.e., oldest last. Using
   // std::greater gives us the desired chronological older, oldest first.
-  std::sort(file_names_.begin(), file_names_.end(),
-            std::greater<std::string>());
+  absl::c_sort(file_names_, std::greater<std::string>());
 }
 
 FileRotatingStreamReader::~FileRotatingStreamReader() = default;
diff --git a/rtc_base/firewall_socket_server.cc b/rtc_base/firewall_socket_server.cc
index ec5a857..f73da99 100644
--- a/rtc_base/firewall_socket_server.cc
+++ b/rtc_base/firewall_socket_server.cc
@@ -13,9 +13,9 @@
 #include <errno.h>
 #include <stddef.h>
 #include <stdint.h>
-#include <algorithm>
 #include <string>
 
+#include "absl/algorithm/container.h"
 #include "rtc_base/async_socket.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
@@ -198,8 +198,7 @@
 }
 
 bool FirewallSocketServer::IsBindableIp(const rtc::IPAddress& ip) {
-  return std::find(unbindable_ips_.begin(), unbindable_ips_.end(), ip) ==
-         unbindable_ips_.end();
+  return !absl::c_linear_search(unbindable_ips_, ip);
 }
 
 Socket* FirewallSocketServer::CreateSocket(int family, int type) {
diff --git a/rtc_base/message_queue.cc b/rtc_base/message_queue.cc
index abb01b3..f827db4 100644
--- a/rtc_base/message_queue.cc
+++ b/rtc_base/message_queue.cc
@@ -7,10 +7,10 @@
  *  in the file PATENTS.  All contributing project authors may
  *  be found in the AUTHORS file in the root of the source tree.
  */
-#include <algorithm>
 #include <string>
 #include <utility>
 
+#include "absl/algorithm/container.h"
 #include "rtc_base/atomic_ops.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
@@ -78,8 +78,7 @@
     // Prevent changes while the list of message queues is processed.
     RTC_DCHECK_EQ(processing_, 0);
     std::vector<MessageQueue*>::iterator iter;
-    iter = std::find(message_queues_.begin(), message_queues_.end(),
-                     message_queue);
+    iter = absl::c_find(message_queues_, message_queue);
     if (iter != message_queues_.end()) {
       message_queues_.erase(iter);
     }
diff --git a/rtc_base/network.cc b/rtc_base/network.cc
index 9c9bc57..6dddbc0 100644
--- a/rtc_base/network.cc
+++ b/rtc_base/network.cc
@@ -31,9 +31,11 @@
 
 #include <stdio.h>
 
-#include <algorithm>
 #include <memory>
 
+#include "absl/algorithm/container.h"
+#include "absl/strings/match.h"
+#include "absl/strings/string_view.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/network_monitor.h"
@@ -187,14 +189,13 @@
 }
 // Test if the network name matches the type<number> pattern, e.g. eth0. The
 // matching is case-sensitive.
-bool MatchTypeNameWithIndexPattern(const std::string& network_name,
-                                   const std::string& type_name) {
-  if (network_name.find(type_name) != 0) {
+bool MatchTypeNameWithIndexPattern(absl::string_view network_name,
+                                   absl::string_view type_name) {
+  if (!absl::StartsWith(network_name, type_name)) {
     return false;
   }
-  return std::find_if(network_name.begin() + type_name.size(),
-                      network_name.end(),
-                      [](char c) { return !isdigit(c); }) == network_name.end();
+  return absl::c_none_of(network_name.substr(type_name.size()),
+                         [](char c) { return !isdigit(c); });
 }
 
 // A cautious note that this method may not provide an accurate adapter type
@@ -319,7 +320,7 @@
   // with the same key.
   std::map<std::string, AddressList> consolidated_address_list;
   NetworkList list(new_networks);
-  std::sort(list.begin(), list.end(), CompareNetworks);
+  absl::c_sort(list, CompareNetworks);
   // First, build a set of network-keys to the ipaddresses.
   for (Network* network : list) {
     bool might_add_to_merged_list = false;
@@ -400,11 +401,10 @@
     for (const auto& kv : networks_map_) {
       Network* network = kv.second;
       // If |network| is in the newly generated |networks_|, it is active.
-      bool found = std::find(networks_.begin(), networks_.end(), network) !=
-                   networks_.end();
+      bool found = absl::c_linear_search(networks_, network);
       network->set_active(found);
     }
-    std::sort(networks_.begin(), networks_.end(), SortNetworks);
+    absl::c_sort(networks_, SortNetworks);
     // Now network interfaces are sorted, we should set the preference value
     // for each of the interfaces we are planning to use.
     // Preference order of network interfaces might have changed from previous
@@ -459,10 +459,9 @@
     const rtc::IPAddress& ip) const {
   for (Network* network : networks_) {
     const auto& ips = network->GetIPs();
-    if (std::find_if(ips.begin(), ips.end(),
-                     [ip](const InterfaceAddress& existing_ip) {
-                       return ip == static_cast<rtc::IPAddress>(existing_ip);
-                     }) != ips.end()) {
+    if (absl::c_any_of(ips, [&](const InterfaceAddress& existing_ip) {
+          return ip == static_cast<rtc::IPAddress>(existing_ip);
+        })) {
       return network;
     }
   }
@@ -1004,7 +1003,7 @@
   changed = changed || ips.size() != ips_.size();
   if (!changed) {
     for (const InterfaceAddress& ip : ips) {
-      if (std::find(ips_.begin(), ips_.end(), ip) == ips_.end()) {
+      if (!absl::c_linear_search(ips_, ip)) {
         changed = true;
         break;
       }
diff --git a/rtc_base/network_unittest.cc b/rtc_base/network_unittest.cc
index 1ba573e..08ffb6e 100644
--- a/rtc_base/network_unittest.cc
+++ b/rtc_base/network_unittest.cc
@@ -24,10 +24,16 @@
 #include "rtc_base/ifaddrs_converter.h"
 #endif  // defined(WEBRTC_POSIX)
 #include "rtc_base/gunit.h"
+#include "test/gmock.h"
 #if defined(WEBRTC_WIN)
 #include "rtc_base/logging.h"  // For RTC_LOG_GLE
 #endif
 
+using ::testing::Contains;
+using ::testing::Not;
+using ::testing::UnorderedElementsAre;
+using ::testing::UnorderedElementsAreArray;
+
 namespace rtc {
 
 namespace {
@@ -478,12 +484,8 @@
   EXPECT_EQ(stats.ipv4_network_count, 0);
   NetworkManager::NetworkList list;
   manager.GetNetworks(&list);
-  EXPECT_EQ(original_list.size(), list.size());
   // Verify that the original members are in the merged list.
-  for (NetworkManager::NetworkList::iterator it = original_list.begin();
-       it != original_list.end(); ++it) {
-    EXPECT_NE(list.end(), std::find(list.begin(), list.end(), *it));
-  }
+  EXPECT_THAT(list, UnorderedElementsAreArray(original_list));
 }
 
 // Tests that when two network lists that describe the same set of networks are
@@ -506,18 +508,11 @@
   EXPECT_FALSE(changed);
   NetworkManager::NetworkList resulting_list;
   manager.GetNetworks(&resulting_list);
-  EXPECT_EQ(original_list.size(), resulting_list.size());
   // Verify that the original members are in the merged list.
-  for (NetworkManager::NetworkList::iterator it = original_list.begin();
-       it != original_list.end(); ++it) {
-    EXPECT_NE(resulting_list.end(),
-              std::find(resulting_list.begin(), resulting_list.end(), *it));
-  }
+  EXPECT_THAT(resulting_list, UnorderedElementsAreArray(original_list));
   // Doublecheck that the new networks aren't in the list.
-  for (NetworkManager::NetworkList::iterator it = second_list.begin();
-       it != second_list.end(); ++it) {
-    EXPECT_EQ(resulting_list.end(),
-              std::find(resulting_list.begin(), resulting_list.end(), *it));
+  for (const Network* network : second_list) {
+    EXPECT_THAT(resulting_list, Not(Contains(network)));
   }
 }
 
@@ -554,7 +549,7 @@
   manager.GetNetworks(&list);
   EXPECT_EQ(original_list.size(), list.size());
   // Make sure the original network is still in the merged list.
-  EXPECT_NE(list.end(), std::find(list.begin(), list.end(), network_to_change));
+  EXPECT_THAT(list, Contains(network_to_change));
   EXPECT_EQ(changed_ip, network_to_change->GetIPs().at(0));
 }
 
@@ -598,18 +593,12 @@
       // This should be the same network object as before.
       EXPECT_EQ((*it), original_list[2]);
       // But with two addresses now.
-      EXPECT_EQ(2U, (*it)->GetIPs().size());
-      EXPECT_NE((*it)->GetIPs().end(),
-                std::find((*it)->GetIPs().begin(), (*it)->GetIPs().end(),
-                          InterfaceAddress(check_ip)));
-      EXPECT_NE((*it)->GetIPs().end(),
-                std::find((*it)->GetIPs().begin(), (*it)->GetIPs().end(),
-                          InterfaceAddress(ip)));
+      EXPECT_THAT((*it)->GetIPs(),
+                  UnorderedElementsAre(InterfaceAddress(check_ip),
+                                       InterfaceAddress(ip)));
     } else {
       // Check the IP didn't get added anywhere it wasn't supposed to.
-      EXPECT_EQ((*it)->GetIPs().end(),
-                std::find((*it)->GetIPs().begin(), (*it)->GetIPs().end(),
-                          InterfaceAddress(ip)));
+      EXPECT_THAT((*it)->GetIPs(), Not(Contains(InterfaceAddress(ip))));
     }
   }
 }
@@ -650,9 +639,7 @@
       EXPECT_EQ(ip, (*it)->GetIPs().at(0));
     } else {
       // Check the IP didn't get added anywhere it wasn't supposed to.
-      EXPECT_EQ((*it)->GetIPs().end(),
-                std::find((*it)->GetIPs().begin(), (*it)->GetIPs().end(),
-                          InterfaceAddress(ip)));
+      EXPECT_THAT((*it)->GetIPs(), Not(Contains(InterfaceAddress(ip))));
     }
   }
 }
diff --git a/rtc_base/numerics/percentile_filter_unittest.cc b/rtc_base/numerics/percentile_filter_unittest.cc
index 8ed6d67..456cb4c 100644
--- a/rtc_base/numerics/percentile_filter_unittest.cc
+++ b/rtc_base/numerics/percentile_filter_unittest.cc
@@ -9,11 +9,12 @@
  */
 
 #include <stdlib.h>
-#include <algorithm>
+#include <array>
 #include <climits>
 #include <cstdint>
 #include <random>
 
+#include "absl/algorithm/container.h"
 #include "rtc_base/constructor_magic.h"
 #include "rtc_base/numerics/percentile_filter.h"
 #include "test/gtest.h"
@@ -110,14 +111,13 @@
 }
 
 TEST_P(PercentileFilterTest, InsertAndEraseTenValuesInRandomOrder) {
-  int64_t zero_to_nine[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+  std::array<int64_t, 10> zero_to_nine = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   // The percentile value of the ten values above.
   const int64_t expected_value = static_cast<int64_t>(GetParam() * 9);
 
   // Insert two sets of |zero_to_nine| in random order.
   for (int i = 0; i < 2; ++i) {
-    std::shuffle(zero_to_nine, zero_to_nine + 10,
-                 std::mt19937(std::random_device()()));
+    absl::c_shuffle(zero_to_nine, std::mt19937(std::random_device()()));
     for (int64_t value : zero_to_nine)
       filter_.Insert(value);
     // After inserting a full set of |zero_to_nine|, the percentile should
@@ -127,13 +127,11 @@
 
   // Insert and erase sets of |zero_to_nine| in random order a few times.
   for (int i = 0; i < 3; ++i) {
-    std::shuffle(zero_to_nine, zero_to_nine + 10,
-                 std::mt19937(std::random_device()()));
+    absl::c_shuffle(zero_to_nine, std::mt19937(std::random_device()()));
     for (int64_t value : zero_to_nine)
       filter_.Erase(value);
     EXPECT_EQ(expected_value, filter_.GetPercentileValue());
-    std::shuffle(zero_to_nine, zero_to_nine + 10,
-                 std::mt19937(std::random_device()()));
+    absl::c_shuffle(zero_to_nine, std::mt19937(std::random_device()()));
     for (int64_t value : zero_to_nine)
       filter_.Insert(value);
     EXPECT_EQ(expected_value, filter_.GetPercentileValue());
diff --git a/rtc_base/numerics/samples_stats_counter.cc b/rtc_base/numerics/samples_stats_counter.cc
index 1348cba..4f6c685 100644
--- a/rtc_base/numerics/samples_stats_counter.cc
+++ b/rtc_base/numerics/samples_stats_counter.cc
@@ -10,9 +10,10 @@
 
 #include "rtc_base/numerics/samples_stats_counter.h"
 
-#include <algorithm>
 #include <cmath>
 
+#include "absl/algorithm/container.h"
+
 namespace webrtc {
 
 SamplesStatsCounter::SamplesStatsCounter() = default;
@@ -42,7 +43,7 @@
   RTC_CHECK_GE(percentile, 0);
   RTC_CHECK_LE(percentile, 1);
   if (!sorted_) {
-    std::sort(samples_.begin(), samples_.end());
+    absl::c_sort(samples_);
     sorted_ = true;
   }
   const double raw_rank = percentile * (samples_.size() - 1);
diff --git a/rtc_base/numerics/samples_stats_counter_unittest.cc b/rtc_base/numerics/samples_stats_counter_unittest.cc
index 3a6b3fb9..8634295 100644
--- a/rtc_base/numerics/samples_stats_counter_unittest.cc
+++ b/rtc_base/numerics/samples_stats_counter_unittest.cc
@@ -11,10 +11,10 @@
 #include "rtc_base/numerics/samples_stats_counter.h"
 
 #include <math.h>
-#include <algorithm>
 #include <random>
 #include <vector>
 
+#include "absl/algorithm/container.h"
 #include "test/gtest.h"
 
 namespace webrtc {
@@ -25,7 +25,7 @@
   for (int i = 1; i <= n; i++) {
     data.push_back(i);
   }
-  std::shuffle(data.begin(), data.end(), std::mt19937(std::random_device()()));
+  absl::c_shuffle(data, std::mt19937(std::random_device()()));
 
   SamplesStatsCounter stats;
   for (double v : data) {
diff --git a/rtc_base/openssl_key_derivation_hkdf.cc b/rtc_base/openssl_key_derivation_hkdf.cc
index 6b75e62..d82f07b 100644
--- a/rtc_base/openssl_key_derivation_hkdf.cc
+++ b/rtc_base/openssl_key_derivation_hkdf.cc
@@ -10,7 +10,6 @@
 
 #include "rtc_base/openssl_key_derivation_hkdf.h"
 
-#include <algorithm>
 #include <utility>
 
 #include <openssl/ossl_typ.h>
@@ -24,6 +23,7 @@
 #include <openssl/err.h>
 #include <openssl/sha.h>
 
+#include "absl/algorithm/container.h"
 #include "rtc_base/buffer.h"
 #include "rtc_base/openssl.h"
 
@@ -91,7 +91,7 @@
   rtc::Buffer salt_buffer;
   if (salt.data() == nullptr || salt.size() == 0) {
     salt_buffer.SetSize(SHA256_DIGEST_LENGTH);
-    std::fill(salt_buffer.begin(), salt_buffer.end(), 0);
+    absl::c_fill(salt_buffer, 0);
     salt = salt_buffer;
   }
   // This buffer will erase itself on release.
diff --git a/rtc_base/proxy_server.cc b/rtc_base/proxy_server.cc
index a1477c8..ec76782 100644
--- a/rtc_base/proxy_server.cc
+++ b/rtc_base/proxy_server.cc
@@ -11,7 +11,6 @@
 #include "rtc_base/proxy_server.h"
 
 #include <stddef.h>
-#include <algorithm>
 
 #include "absl/memory/memory.h"
 #include "rtc_base/checks.h"
diff --git a/rtc_base/ssl_certificate.cc b/rtc_base/ssl_certificate.cc
index 8f6cfa2..657561a 100644
--- a/rtc_base/ssl_certificate.cc
+++ b/rtc_base/ssl_certificate.cc
@@ -10,10 +10,10 @@
 
 #include "rtc_base/ssl_certificate.h"
 
-#include <algorithm>
 #include <string>
 #include <utility>
 
+#include "absl/algorithm/container.h"
 #include "absl/memory/memory.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/openssl_certificate.h"
@@ -89,8 +89,8 @@
 
 std::unique_ptr<SSLCertChain> SSLCertChain::Clone() const {
   std::vector<std::unique_ptr<SSLCertificate>> new_certs(certs_.size());
-  std::transform(
-      certs_.begin(), certs_.end(), new_certs.begin(),
+  absl::c_transform(
+      certs_, new_certs.begin(),
       [](const std::unique_ptr<SSLCertificate>& cert)
           -> std::unique_ptr<SSLCertificate> { return cert->Clone(); });
   return absl::make_unique<SSLCertChain>(std::move(new_certs));
diff --git a/rtc_base/ssl_fingerprint.cc b/rtc_base/ssl_fingerprint.cc
index 77b6149..c607810 100644
--- a/rtc_base/ssl_fingerprint.cc
+++ b/rtc_base/ssl_fingerprint.cc
@@ -11,10 +11,10 @@
 #include "rtc_base/ssl_fingerprint.h"
 
 #include <ctype.h>
-#include <algorithm>
 #include <cstdint>
 #include <string>
 
+#include "absl/algorithm/container.h"
 #include "absl/memory/memory.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/message_digest.h"
@@ -113,8 +113,7 @@
 std::string SSLFingerprint::GetRfc4572Fingerprint() const {
   std::string fingerprint =
       rtc::hex_encode_with_delimiter(digest.data<char>(), digest.size(), ':');
-  std::transform(fingerprint.begin(), fingerprint.end(), fingerprint.begin(),
-                 ::toupper);
+  absl::c_transform(fingerprint, fingerprint.begin(), ::toupper);
   return fingerprint;
 }
 
diff --git a/rtc_base/test_echo_server.h b/rtc_base/test_echo_server.h
index 4710560..5f06a0e 100644
--- a/rtc_base/test_echo_server.h
+++ b/rtc_base/test_echo_server.h
@@ -13,10 +13,10 @@
 
 #include <stddef.h>
 #include <stdint.h>
-#include <algorithm>
 #include <list>
 #include <memory>
 
+#include "absl/algorithm/container.h"
 #include "rtc_base/async_packet_socket.h"
 #include "rtc_base/async_socket.h"
 #include "rtc_base/async_tcp_socket.h"
@@ -55,8 +55,7 @@
     socket->Send(buf, size, options);
   }
   void OnClose(AsyncPacketSocket* socket, int err) {
-    ClientList::iterator it =
-        std::find(client_sockets_.begin(), client_sockets_.end(), socket);
+    ClientList::iterator it = absl::c_find(client_sockets_, socket);
     client_sockets_.erase(it);
     Thread::Current()->Dispose(socket);
   }
diff --git a/rtc_base/unique_id_generator_unittest.cc b/rtc_base/unique_id_generator_unittest.cc
index 7ce192c..a8d7b9e 100644
--- a/rtc_base/unique_id_generator_unittest.cc
+++ b/rtc_base/unique_id_generator_unittest.cc
@@ -8,10 +8,10 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#include "algorithm"
-#include "string"
-#include "vector"
+#include <string>
+#include <vector>
 
+#include "absl/algorithm/container.h"
 #include "api/array_view.h"
 #include "rtc_base/gunit.h"
 #include "rtc_base/helpers.h"
@@ -69,11 +69,11 @@
     values.push_back(generator2());
   }
   EXPECT_THAT(values, ::testing::SizeIs(num_elements));
-  std::sort(values.begin(), values.end());
-  std::sort(known_values.begin(), known_values.end());
+  absl::c_sort(values);
+  absl::c_sort(known_values);
   std::vector<typename Generator::value_type> intersection;
-  std::set_intersection(values.begin(), values.end(), known_values.begin(),
-                        known_values.end(), std::back_inserter(intersection));
+  absl::c_set_intersection(values, known_values,
+                           std::back_inserter(intersection));
   EXPECT_THAT(intersection, IsEmpty());
 }
 
@@ -100,11 +100,11 @@
     values.push_back(generator2());
   }
   EXPECT_THAT(values, ::testing::SizeIs(num_elements));
-  std::sort(values.begin(), values.end());
-  std::sort(known_values.begin(), known_values.end());
+  absl::c_sort(values);
+  absl::c_sort(known_values);
   std::vector<typename Generator::value_type> intersection;
-  std::set_intersection(values.begin(), values.end(), known_values.begin(),
-                        known_values.end(), std::back_inserter(intersection));
+  absl::c_set_intersection(values, known_values,
+                           std::back_inserter(intersection));
   EXPECT_THAT(intersection, IsEmpty());
 }
 
diff --git a/rtc_base/virtual_socket_server.cc b/rtc_base/virtual_socket_server.cc
index 3255124..0c621c9 100644
--- a/rtc_base/virtual_socket_server.cc
+++ b/rtc_base/virtual_socket_server.cc
@@ -13,11 +13,11 @@
 #include <errno.h>
 #include <math.h>
 
-#include <algorithm>
 #include <map>
 #include <memory>
 #include <vector>
 
+#include "absl/algorithm/container.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/fake_clock.h"
 #include "rtc_base/logging.h"
@@ -1108,7 +1108,7 @@
   for (Function::size_type i = 0; i < f->size(); ++i)
     std::swap((*f)[i].first, (*f)[i].second);
 
-  std::sort(f->begin(), f->end(), FunctionDomainCmp());
+  absl::c_sort(*f, FunctionDomainCmp());
   return f;
 }
 
@@ -1129,8 +1129,7 @@
 }
 
 double VirtualSocketServer::Evaluate(Function* f, double x) {
-  Function::iterator iter =
-      std::lower_bound(f->begin(), f->end(), x, FunctionDomainCmp());
+  Function::iterator iter = absl::c_lower_bound(*f, x, FunctionDomainCmp());
   if (iter == f->begin()) {
     return (*f)[0].second;
   } else if (iter == f->end()) {