diff --git a/api/BUILD.gn b/api/BUILD.gn
index af50215..4d8e40a 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -754,6 +754,7 @@
     deps = [
       ":libjingle_peerconnection_api",
       "../rtc_base:checks",
+      "//third_party/abseil-cpp/absl/algorithm:container",
       "//third_party/abseil-cpp/absl/memory",
     ]
   }
@@ -770,6 +771,7 @@
       ":libjingle_peerconnection_api",
       "../rtc_base",
       "../rtc_base:checks",
+      "//third_party/abseil-cpp/absl/algorithm:container",
       "//third_party/abseil-cpp/absl/memory",
     ]
   }
diff --git a/api/jsep_ice_candidate.cc b/api/jsep_ice_candidate.cc
index 59da4e4..3328386 100644
--- a/api/jsep_ice_candidate.cc
+++ b/api/jsep_ice_candidate.cc
@@ -10,9 +10,10 @@
 
 #include "api/jsep_ice_candidate.h"
 
-#include <algorithm>
 #include <utility>
 
+#include "absl/algorithm/container.h"
+
 namespace webrtc {
 
 std::string JsepIceCandidate::sdp_mid() const {
@@ -71,10 +72,9 @@
 }
 
 size_t JsepCandidateCollection::remove(const cricket::Candidate& candidate) {
-  auto iter = std::find_if(candidates_.begin(), candidates_.end(),
-                           [candidate](JsepIceCandidate* c) {
-                             return candidate.MatchesForRemoval(c->candidate());
-                           });
+  auto iter = absl::c_find_if(candidates_, [&](JsepIceCandidate* c) {
+    return candidate.MatchesForRemoval(c->candidate());
+  });
   if (iter != candidates_.end()) {
     delete *iter;
     candidates_.erase(iter);
diff --git a/api/rtp_parameters.cc b/api/rtp_parameters.cc
index 9ba2423..aea74a9 100644
--- a/api/rtp_parameters.cc
+++ b/api/rtp_parameters.cc
@@ -221,10 +221,10 @@
 
     // Only add non-encrypted extension if no encrypted with the same URI
     // is also present...
-    if (std::find_if(extension + 1, extensions.end(),
-                     [extension](const RtpExtension& check) {
-                       return extension->uri == check.uri;
-                     }) != extensions.end()) {
+    if (std::any_of(extension + 1, extensions.end(),
+                    [&](const RtpExtension& check) {
+                      return extension->uri == check.uri;
+                    })) {
       continue;
     }
 
diff --git a/api/stats_types.cc b/api/stats_types.cc
index 1ad195d..a01ecd0 100644
--- a/api/stats_types.cc
+++ b/api/stats_types.cc
@@ -12,6 +12,7 @@
 
 #include <string.h>
 
+#include "absl/algorithm/container.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/ref_counted_object.h"
 
@@ -817,8 +818,8 @@
 StatsReport* StatsCollection::ReplaceOrAddNew(const StatsReport::Id& id) {
   RTC_DCHECK(thread_checker_.CalledOnValidThread());
   RTC_DCHECK(id.get());
-  Container::iterator it = std::find_if(
-      list_.begin(), list_.end(),
+  Container::iterator it = absl::c_find_if(
+      list_,
       [&id](const StatsReport* r) -> bool { return r->id()->Equals(id); });
   if (it != end()) {
     StatsReport* report = new StatsReport((*it)->id());
@@ -833,8 +834,8 @@
 // will be returned.
 StatsReport* StatsCollection::Find(const StatsReport::Id& id) {
   RTC_DCHECK(thread_checker_.CalledOnValidThread());
-  Container::iterator it = std::find_if(
-      list_.begin(), list_.end(),
+  Container::iterator it = absl::c_find_if(
+      list_,
       [&id](const StatsReport* r) -> bool { return r->id()->Equals(id); });
   return it == list_.end() ? nullptr : *it;
 }
diff --git a/api/test/fake_media_transport.h b/api/test/fake_media_transport.h
index a085bc0..ef8284c 100644
--- a/api/test/fake_media_transport.h
+++ b/api/test/fake_media_transport.h
@@ -16,6 +16,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/algorithm/container.h"
 #include "absl/memory/memory.h"
 #include "api/media_transport_interface.h"
 
@@ -85,16 +86,13 @@
 
   void AddTargetTransferRateObserver(
       webrtc::TargetTransferRateObserver* observer) override {
-    RTC_CHECK(std::find(target_rate_observers_.begin(),
-                        target_rate_observers_.end(),
-                        observer) == target_rate_observers_.end());
+    RTC_CHECK(!absl::c_linear_search(target_rate_observers_, observer));
     target_rate_observers_.push_back(observer);
   }
 
   void RemoveTargetTransferRateObserver(
       webrtc::TargetTransferRateObserver* observer) override {
-    auto it = std::find(target_rate_observers_.begin(),
-                        target_rate_observers_.end(), observer);
+    auto it = absl::c_find(target_rate_observers_, observer);
     if (it != target_rate_observers_.end()) {
       target_rate_observers_.erase(it);
     }
diff --git a/api/test/loopback_media_transport.cc b/api/test/loopback_media_transport.cc
index 9b43da2..4e8fb0e 100644
--- a/api/test/loopback_media_transport.cc
+++ b/api/test/loopback_media_transport.cc
@@ -10,6 +10,7 @@
 
 #include "api/test/loopback_media_transport.h"
 
+#include "absl/algorithm/container.h"
 #include "absl/memory/memory.h"
 #include "rtc_base/time_utils.h"
 
@@ -242,9 +243,8 @@
   RTC_CHECK(observer);
   {
     rtc::CritScope cs(&sink_lock_);
-    RTC_CHECK(std::find(target_transfer_rate_observers_.begin(),
-                        target_transfer_rate_observers_.end(),
-                        observer) == target_transfer_rate_observers_.end());
+    RTC_CHECK(
+        !absl::c_linear_search(target_transfer_rate_observers_, observer));
     target_transfer_rate_observers_.push_back(observer);
   }
   invoker_.AsyncInvoke<void>(RTC_FROM_HERE, thread_, [this] {
@@ -271,8 +271,7 @@
 void MediaTransportPair::LoopbackMediaTransport::
     RemoveTargetTransferRateObserver(TargetTransferRateObserver* observer) {
   rtc::CritScope cs(&sink_lock_);
-  auto it = std::find(target_transfer_rate_observers_.begin(),
-                      target_transfer_rate_observers_.end(), observer);
+  auto it = absl::c_find(target_transfer_rate_observers_, observer);
   if (it == target_transfer_rate_observers_.end()) {
     RTC_LOG(LS_WARNING)
         << "Attempt to remove an unknown TargetTransferRate observer";
@@ -286,8 +285,7 @@
   RTC_CHECK(observer);
   {
     rtc::CritScope cs(&sink_lock_);
-    RTC_CHECK(std::find(rtt_observers_.begin(), rtt_observers_.end(),
-                        observer) == rtt_observers_.end());
+    RTC_CHECK(!absl::c_linear_search(rtt_observers_, observer));
     rtt_observers_.push_back(observer);
   }
   invoker_.AsyncInvoke<void>(RTC_FROM_HERE, thread_, [this] {
@@ -303,7 +301,7 @@
 void MediaTransportPair::LoopbackMediaTransport::RemoveRttObserver(
     MediaTransportRttObserver* observer) {
   rtc::CritScope cs(&sink_lock_);
-  auto it = std::find(rtt_observers_.begin(), rtt_observers_.end(), observer);
+  auto it = absl::c_find(rtt_observers_, observer);
   if (it == rtt_observers_.end()) {
     RTC_LOG(LS_WARNING) << "Attempt to remove an unknown RTT observer";
     return;
diff --git a/api/video_codecs/BUILD.gn b/api/video_codecs/BUILD.gn
index e219353..ceb8eaf 100644
--- a/api/video_codecs/BUILD.gn
+++ b/api/video_codecs/BUILD.gn
@@ -46,6 +46,7 @@
     "../video:video_bitrate_allocation",
     "../video:video_codec_constants",
     "../video:video_frame",
+    "//third_party/abseil-cpp/absl/algorithm:container",
     "//third_party/abseil-cpp/absl/container:inlined_vector",
     "//third_party/abseil-cpp/absl/strings",
     "//third_party/abseil-cpp/absl/types:optional",
diff --git a/api/video_codecs/vp8_temporal_layers.cc b/api/video_codecs/vp8_temporal_layers.cc
index a3c0db1..df4dfa7 100644
--- a/api/video_codecs/vp8_temporal_layers.cc
+++ b/api/video_codecs/vp8_temporal_layers.cc
@@ -12,6 +12,7 @@
 
 #include <utility>
 
+#include "absl/algorithm/container.h"
 #include "rtc_base/checks.h"
 
 namespace webrtc {
@@ -20,8 +21,8 @@
     std::vector<std::unique_ptr<Vp8FrameBufferController>>&& controllers)
     : controllers_(std::move(controllers)) {
   RTC_DCHECK(!controllers_.empty());
-  RTC_DCHECK(std::none_of(
-      controllers_.begin(), controllers_.end(),
+  RTC_DCHECK(absl::c_none_of(
+      controllers_,
       [](const std::unique_ptr<Vp8FrameBufferController>& controller) {
         return controller.get() == nullptr;
       }));
