diff --git a/src/lib/utility/utility.h b/src/lib/utility/utility.h index 460a07e6..0e24966f 100644 --- a/src/lib/utility/utility.h +++ b/src/lib/utility/utility.h @@ -34,6 +34,9 @@ namespace utility template void append(std::unordered_set& a, const std::unordered_set& b); + template + std::vector unique(const std::vector& a); + template std::vector toVector(const std::deque& d); @@ -86,6 +89,29 @@ void utility::append(std::unordered_set& a, const std::unordered_set& b) a.insert(b.begin(), b.end()); } +template +std::vector utility::unique(const std::vector& a) +{ + std::map unique; + + size_t i = 0; + for (const T& t : a) + { + if (unique.emplace(t, i).second) + { + i++; + } + } + + std::vector r(i, T()); + for (const std::pair& p : unique) + { + r[p.second] = p.first; + } + + return r; +} + template std::vector utility::toVector(const std::deque& d) { diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp index 5abb8a92..f1334b13 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp @@ -191,12 +191,7 @@ void QtProjectWizzardContentPaths::detectionClicked() } std::vector oldPaths = m_list->getList(); - - std::set uniquePaths; - uniquePaths.insert(oldPaths.begin(), oldPaths.end()); - uniquePaths.insert(paths.begin(), paths.end()); - - m_list->setList(utility::toVector(uniquePaths)); + m_list->setList(utility::unique(utility::concat(oldPaths, paths))); }