From: Angus Leeming Date: Thu, 27 Feb 2003 13:41:22 +0000 (+0000) Subject: (Ling Li): re-write eliminate_duplicates to avoid initial sort. X-Git-Tag: 1.6.10~17404 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=165c7cadf13c82955ee79af6a409f5008f41a9eb;p=features.git (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 --- 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