diff --git a/tools/gn/desc_builder.cc b/tools/gn/desc_builder.cc
index d4b4941..e377f3e 100644
--- a/tools/gn/desc_builder.cc
+++ b/tools/gn/desc_builder.cc
@@ -538,8 +538,7 @@
     std::vector<LabelTargetPair> sorted_deps;
     for (const auto& pair : target->GetDeps(Target::DEPS_ALL))
       sorted_deps.push_back(pair);
-    std::sort(sorted_deps.begin(), sorted_deps.end(),
-              LabelPtrLabelLess<Target>());
+    std::sort(sorted_deps.begin(), sorted_deps.end());
 
     std::string indent(indent_level * 2, ' ');
 
diff --git a/tools/gn/label_ptr.h b/tools/gn/label_ptr.h
index 5aaa02d..ac994f5 100644
--- a/tools/gn/label_ptr.h
+++ b/tools/gn/label_ptr.h
@@ -24,25 +24,23 @@
 struct LabelPtrPair {
   typedef T DestType;
 
-  LabelPtrPair() : label(), ptr(nullptr), origin(nullptr) {}
+  LabelPtrPair() = default;
 
-  explicit LabelPtrPair(const Label& l)
-      : label(l), ptr(nullptr), origin(nullptr) {}
+  explicit LabelPtrPair(const Label& l) : label(l) {}
 
   // This contructor is typically used in unit tests, it extracts the label
   // automatically from a given pointer.
-  explicit LabelPtrPair(const T* p)
-      : label(p->label()), ptr(p), origin(nullptr) {}
+  explicit LabelPtrPair(const T* p) : label(p->label()), ptr(p) {}
 
-  ~LabelPtrPair() {}
+  ~LabelPtrPair() = default;
 
   Label label;
-  const T* ptr;  // May be NULL.
+  const T* ptr = nullptr;
 
   // The origin of this dependency. This will be null for internally generated
   // dependencies. This happens when a group is automatically expanded and that
   // group's members are added to the target that depends on that group.
-  const ParseNode* origin;
+  const ParseNode* origin = nullptr;
 };
 
 typedef LabelPtrPair<Config> LabelConfigPair;
@@ -51,41 +49,6 @@
 typedef std::vector<LabelConfigPair> LabelConfigVector;
 typedef std::vector<LabelTargetPair> LabelTargetVector;
 
-// Comparison and search functions ---------------------------------------------
-
-// To do a brute-force search by label:
-// std::find_if(vect.begin(), vect.end(), LabelPtrLabelEquals<Config>(label));
-template <typename T>
-struct LabelPtrLabelEquals {
-  explicit LabelPtrLabelEquals(const Label& l) : label(l) {}
-
-  bool operator()(const LabelPtrPair<T>& arg) const {
-    return arg.label == label;
-  }
-
-  const Label& label;
-};
-
-// To do a brute-force search by object pointer:
-// std::find_if(vect.begin(), vect.end(), LabelPtrPtrEquals<Config>(config));
-template <typename T>
-struct LabelPtrPtrEquals {
-  explicit LabelPtrPtrEquals(const T* p) : ptr(p) {}
-
-  bool operator()(const LabelPtrPair<T>& arg) const { return arg.ptr == ptr; }
-
-  const T* ptr;
-};
-
-// To sort by label:
-// std::sort(vect.begin(), vect.end(), LabelPtrLabelLess<Config>());
-template <typename T>
-struct LabelPtrLabelLess {
-  bool operator()(const LabelPtrPair<T>& a, const LabelPtrPair<T>& b) const {
-    return a.label < b.label;
-  }
-};
-
 // Default comparison operators -----------------------------------------------
 //
 // The default hash and comparison operators operate on the label, which should
