Warum sollte std :: less als Standardfunktion zum Vergleichen von Schlüsseln in std :: map und std :: set verwendet werden?

Ich frage mich warumstd::map undstd::set verwendenstd::less als Standardfunktion zum Vergleichen von Schlüsseln. Warum nicht einen Funktor verwenden, der ähnlich wie strcmp funktioniert? So etwas wie:

  template <typename T> struct compare
  {
     // Return less than 0 if lhs < rhs
     // Return 0 if lhs == rhs
     // Return greater than 0 if lhs > rhs
     int operator()(T const& lhs, T const& rhs)
     {
        return (lhs-rhs);
     }
  }

Sag amap hat zwei Objekte mit Schlüsselnkey1 undkey2. Nun wollen wir ein weiteres Objekt mit Schlüssel einfügenkey3.

Beim Benutzenstd::less, dasinsert Funktion muss zuerst aufgerufen werdenstd::less::operator() mitkey1 undkey3. Annehmenstd::less::operator()(key1, key3) gibt false zurück. Es muss anrufenstd::less::operator() wieder mit den Tasten geschaltet,std::less::operator()(key3, key1), um zu entscheiden, obkey1 entsprichtkey3 oderkey3 ist größer alskey1. Es gibt zwei Anrufe zustd::less::operator() eine Entscheidung treffen, wenn der erste Aufruf falsch zurückgibt.

Hättenstd::map::insert benutztcomparewürde es genügend Informationen geben, um mit nur einem Anruf die richtige Entscheidung zu treffen.

Abhängig von der Art des Schlüssels in der Karte,std::less::operator()(key1, key2) könnte teuer sein.

Es sei denn, ich vermisse etwas sehr Grundlegendes, sollte nichtstd::map undstd::set benutze so etwas wiecompare Anstatt vonstd::less als Standardfunktion zum Vergleichen von Schlüsseln?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage