Sorting a std::vector<std::pair<std::string, int> > is very slow because std::swap is not used for switching strings.
std::swap for every std::pair should use two std::swap for the components of the pair. The following test program shows that this is currently not the case: #include <iostream> #include <algorithm> #include <vector> class A { public: A(int a) : val(a) { std::cout << "Constructing with: " << a << "\n"; } A(A const & a) : val(a.val) { std::cout << " Copy constructor from: " << a.val << "\n"; } A & operator=(A const & a) { val = a.val; std::cout << "Assignment from: " << a.val << "\n"; return *this; } ~A() { std::cout << "Destructing " << val << "\n";} public: int val; }; namespace std { void swap(A & a, A & b) { std::cout << "SWapping: " << a.val << "/" << b.val << "\n"; std::swap(a, b); } } int main() { std::pair<A, int> f(A(10), 2); std::pair<A, int> s(A(20), 3); std::swap(f, s); } -- Summary: std::swap does not use std::swap for the components of a std::pair Product: gcc Version: 4.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bartoschek at gmx dot de GCC build triplet: i586-suse-linux GCC host triplet: i586-suse-linux GCC target triplet: i586-suse-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38466