diff --git a/Source/cmPropertyMap.cxx b/Source/cmPropertyMap.cxx index 64bceb5139..3ed4c057c0 100644 --- a/Source/cmPropertyMap.cxx +++ b/Source/cmPropertyMap.cxx @@ -2,6 +2,7 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmPropertyMap.h" +#include #include void cmPropertyMap::Clear() @@ -59,15 +60,21 @@ std::vector cmPropertyMap::GetKeys() const for (auto const& item : Map_) { keyList.push_back(item.first); } + std::sort(keyList.begin(), keyList.end()); return keyList; } std::vector> cmPropertyMap::GetList() const { - std::vector> kvList; + typedef std::pair StringPair; + std::vector 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; } diff --git a/Source/cmPropertyMap.h b/Source/cmPropertyMap.h index 6284e8c924..9aed34960e 100644 --- a/Source/cmPropertyMap.h +++ b/Source/cmPropertyMap.h @@ -5,11 +5,14 @@ #include "cmConfigure.h" // IWYU pragma: keep -#include #include +#include #include #include +/** \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 GetKeys() const; @@ -41,7 +45,7 @@ public: std::vector> GetList() const; private: - std::map Map_; + std::unordered_map Map_; }; #endif