From 165c7cadf13c82955ee79af6a409f5008f41a9eb Mon Sep 17 00:00:00 2001 From: Angus Leeming Date: Thu, 27 Feb 2003 13:41:22 +0000 Subject: [PATCH] (Ling Li): re-write eliminate_duplicates to avoid initial sort. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6294 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/support/ChangeLog | 5 +++++ src/support/lyxalgo.h | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/support/ChangeLog b/src/support/ChangeLog index e611aa2b58..e301685a34 100644 --- a/src/support/ChangeLog +++ b/src/support/ChangeLog @@ -1,3 +1,8 @@ +2003-02-27 Ling Li + + * lyxalgo.h (eliminate_duplicates): re-written to avoid the initial + sort. + 2003-02-25 Alfredo Braunstein * forkedcontr.C (timer): remove bogus continue diff --git a/src/support/lyxalgo.h b/src/support/lyxalgo.h index a40d2a5cb6..6bccfb1296 100644 --- a/src/support/lyxalgo.h +++ b/src/support/lyxalgo.h @@ -17,6 +17,8 @@ #include #include #include +#include + namespace lyx { @@ -91,9 +93,16 @@ count (Iterator first, Iterator last, T const & value) template void eliminate_duplicates(C & c) { - std::sort(c.begin(), c.end()); - typename C::iterator p = std::unique(c.begin(), c.end()); - c.erase(p, c.end()); + C unique_c; + std::set s; + + for (typename C::iterator p = c.begin(); p != c.end(); ++p) { + if (s.find(*p) == s.end()) { + unique_c.push_back(*p); + s.insert(*p); + } + } + swap(c, unique_c); } } // namespace lyx -- 2.39.5