# UNDF: UNDF-2026-000000033 diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx index abc1234..def5678 100644 --- a/Source/cmComputeLinkInformation.cxx +++ b/Source/cmComputeLinkInformation.cxx @@ -456,14 +456,19 @@ std::vector> cmComputeLinkInformation::GetDirectoriesWithBacktraces() { std::vector> directoriesWithBacktraces; std::vector> targetLinkDirectories = this->Target->GetLinkDirectories(this->Config, this->LinkLanguage); + // Build an index from directory string → BT entry for O(1) lookup. + std::unordered_map> dirIndex; + dirIndex.reserve(targetLinkDirectories.size()); + for (auto& bt : targetLinkDirectories) + dirIndex.emplace(bt.Value, std::move(bt)); + std::vector const& orderedDirectories = this->GetDirectories(); for (std::string const& dir : orderedDirectories) { - auto result = std::find(targetLinkDirectories.begin(), - targetLinkDirectories.end(), dir); - if (result != targetLinkDirectories.end()) { - directoriesWithBacktraces.emplace_back(std::move(*result)); + auto result = dirIndex.find(dir); + if (result != dirIndex.end()) { + directoriesWithBacktraces.emplace_back(std::move(result->second)); } else { directoriesWithBacktraces.emplace_back(dir); }