Bladeren bron

cmPropertyMap: Use std::unordered_map as container instead of std::map

Sebastian Holtermann 6 jaren geleden
bovenliggende
commit
00d265e3c8
2 gewijzigde bestanden met toevoegingen van 14 en 3 verwijderingen
  1. 8 1
      Source/cmPropertyMap.cxx
  2. 6 2
      Source/cmPropertyMap.h

+ 8 - 1
Source/cmPropertyMap.cxx

@@ -2,6 +2,7 @@
    file Copyright.txt or https://cmake.org/licensing for details.  */
 #include "cmPropertyMap.h"
 
+#include <algorithm>
 #include <utility>
 
 void cmPropertyMap::Clear()
@@ -59,15 +60,21 @@ std::vector<std::string> cmPropertyMap::GetKeys() const
   for (auto const& item : Map_) {
     keyList.push_back(item.first);
   }
+  std::sort(keyList.begin(), keyList.end());
   return keyList;
 }
 
 std::vector<std::pair<std::string, std::string>> cmPropertyMap::GetList() const
 {
-  std::vector<std::pair<std::string, std::string>> kvList;
+  typedef std::pair<std::string, std::string> StringPair;
+  std::vector<StringPair> kvList;
   kvList.reserve(Map_.size());
   for (auto const& item : Map_) {
     kvList.emplace_back(item.first, item.second);
   }
+  std::sort(kvList.begin(), kvList.end(),
+            [](StringPair const& a, StringPair const& b) {
+              return a.first < b.first;
+            });
   return kvList;
 }

+ 6 - 2
Source/cmPropertyMap.h

@@ -5,11 +5,14 @@
 
 #include "cmConfigure.h" // IWYU pragma: keep
 
-#include <map>
 #include <string>
+#include <unordered_map>
 #include <utility>
 #include <vector>
 
+/** \class cmPropertyMap
+ * \brief String property map.
+ */
 class cmPropertyMap
 {
 public:
@@ -34,6 +37,7 @@ public:
   void RemoveProperty(const std::string& name);
 
   // -- Lists
+
   //! Get a sorted list of property keys
   std::vector<std::string> GetKeys() const;
 
@@ -41,7 +45,7 @@ public:
   std::vector<std::pair<std::string, std::string>> GetList() const;
 
 private:
-  std::map<std::string, std::string> Map_;
+  std::unordered_map<std::string, std::string> Map_;
 };
 
 #endif