2012-04-01 17 views
3

Ich bin ein Neuling nach C++, und diese Frage scheint für viele Leute offensichtlich.C++: Std :: Map-Sortierung

Wenn ich so etwas wie

schreiben
std::map<int, double> m; 
  • Ist m garantiert nach int Reihenfolge sortiert werden?
  • Muss eine Vergleichsklasse definiert werden, um die Sortierung zu erzwingen?

Zum Beispiel

class own_int_less : public binary_function<int, int, bool> 
{ 
public: 
    bool operator()(const double &left, const double &right ) const 
    { 
     return (abs(left - right) > epsilon) && (left < right); 
    }; 
    double epsilon; 
}; 
  • Wenn tatsächlich erfolgte die Sortierung? Ich meine, wird die Sortierfunktion jedes Mal aufgerufen, wenn ich etwas in die Karte einfüge? Oder wird es aufgerufen, bevor ich die Karte durchblättere?

Danke.

+3

Sie haben eine 'binary_function ' definiert, aber Ihr 'operator()' nimmt zwei 'const double &' als Parameter ... –

+0

Achten Sie darauf, Ihre Membervariablen zu initialisieren. ('Epsilon' wird in Ihrem Beispiel niemals initialisiert). –

Antwort

10

Ist m garantiert nach int Reihenfolge sortiert?

Ja. Der Standardkomparator ist std::less<Key>, was in Ihrem Fall ist, der < wie erwartet verwendet.

Muss eine Vergleichsklasse definiert werden, um die Sortierung zu erzwingen?

Nein, weil die vorherige Antwort "ja" war!

Wann ist die Sortierung tatsächlich erfolgt?

Eine typische map Implementierung verwendet der Komparator ein neues Element in der korrekten Position einzufügen. Der Komparator wird auch beim Suchen verwendet.