2016-05-25 17 views
-1

Wie kann ich in std::multimap <bool life, int id, std::pair < x, y >> einfügen?C++ Wie fügt man in std :: multimap ein?

Ich benutze es zum Speichern von Daten-Player und ia, Ist es der beste Container dafür?

+7

Haben Sie versucht "einfügen"? –

+3

Der dritte Template-Parameter von 'std :: multimap' ist ein Komparator. Ich weiß nicht, was Sie genau machen wollen. Die Erklärung in der Frage und das bisschen Code, das Sie zur Verfügung gestellt haben, ergeben für mich keinen Sinn. – chris

+1

Sie finden nützliche Dokumentation zu [cppreference] (http://en.cppreference.com/w/cpp/container/multimap) –

Antwort

3

Nicht gut.

Die Signatur einer Multimap ist wie folgt:

template < class Key,         // multimap::key_type 
      class T,          // multimap::mapped_type 
      class Compare = less<Key>,     // multimap::key_compare 
      class Alloc = allocator<pair<const Key,T> > // multimap::allocator_type 
      > class multimap; 

Die falsche Verwendung Ihrer multimap ist.

Der Schlüssel ist bool das heißt, Sie verwenden nur zwei Knoten 0 und 1 (oder false´ and true`). So ist jedes eingefügte Element in jedem von ihnen, und somit werden Sie Elemente mit dem gleichen Schlüssel tatsächlich anwerben. Dies ist ineffizient.

Der Wert ist ein int. Nun, in Ordnung, obwohl ich mich frage, warum sollten Sie eine bool zu einem int zuordnen.

Und schließlich der Fehler in Ihrer Unterschrift: pair ist keine Funktion vergleichen, aber das dritte Template-Argument muss ein Funktion vergleichen. Wenn Sie es leer lassen, dann ist es standardmäßig less<bool> (weil Sie bool als Schlüssel gewählt haben).