Ich habe eine Datenstruktur:schnellere Alternative zu STL std :: map
typedef std::pair<boost::shared_ptr<X>, boost::shared_ptr<X> > pair_ptr;
std::map< pair_ptr, int >
, die ich in einem iterativen Prozess verwenden. In jeder Iteration muss ich kopieren, um die std :: map zu kopieren und möglicherweise eine Kopie zu zerstören. Allerdings kann die std :: map groß werden, über 100k Elemente. Dies verlangsamt das Programm erheblich. Ich habe den Bediener definiert < als:
inline bool operator<(const pair_ptr& a, const pair_ptr& b)
{
return (a.first < b.first) or
(a.first == b.first and a.second < b.second);
}
Ich verwende den std :: map Copykonstruktor und destructor. Gibt es eine schnellere Alternative?
Wie haben Sie kompiliert? Mit welchem Compiler (& Version)? Haben Sie Optimierungen aktiviert? Auf welchem Computer & Betriebssystem? –
gnu C++, gcc-Version 4.8.4 (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.3), Build-Typ Flags: -O2 -g – Michael
Redesign dein Programm, so dass Sie nicht _need_ große Karten um jeden Iteraton kopieren müssen. –