Optimize vector creation in compile_commands_writer.cc.

This change uses range-based initialization for vectors, which is
generally more efficient than push_back in a loop as it avoids having to
do a per-loop capacity check.

Change-Id: I1fad702bc772f7c5f4f9b9dac3d73b55c0fe4503
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/20160
Reviewed-by: David Turner <digit@google.com>
Reviewed-by: Takuto Ikuta <tikuta@google.com>
Commit-Queue: David Turner <digit@google.com>
diff --git a/src/gn/compile_commands_writer.cc b/src/gn/compile_commands_writer.cc
index 9ab038e..17c7f75 100644
--- a/src/gn/compile_commands_writer.cc
+++ b/src/gn/compile_commands_writer.cc
@@ -22,6 +22,7 @@
 #include "gn/string_output_buffer.h"
 #include "gn/substitution_list.h"
 #include "gn/substitution_writer.h"
+#include "gn/unique_vector.h"
 
 // Structure of JSON output file
 // [
@@ -440,16 +441,17 @@
 std::vector<const Target*> CompileCommandsWriter::FilterLegacyTargets(
     const std::vector<const Target*>& all_targets,
     const std::string& target_filter_string) {
-  std::set<std::string> target_filters_set;
-  for (auto& target :
-       base::SplitString(target_filter_string, ",", base::TRIM_WHITESPACE,
-                         base::SPLIT_WANT_NONEMPTY)) {
-    target_filters_set.insert(target);
-  }
+  std::vector<std::string> target_filters =
+      base::SplitString(target_filter_string, ",", base::TRIM_WHITESPACE,
+                        base::SPLIT_WANT_NONEMPTY);
+  UniqueVector<std::string> target_filters_set;
+  target_filters_set.reserve(target_filters.size());
+  target_filters_set.Append(std::move(target_filters));
 
   std::vector<const Target*> result;
+  result.reserve(all_targets.size());
   for (auto& target : all_targets) {
-    if (target_filters_set.count(target->label().name()))
+    if (target_filters_set.Contains(target->label().name()))
       result.push_back(target);
   }