Wie fügt man ein Paar std :: pair in ein anderes std :: pair ein?

7

Ich erkläre eine Zuordnung von String zu einem Paar wie folgt:

%Vor%

Und ich initialisiere es als:

%Vor%

Visual C ++ gibt mir jedoch den Fehler "C2664, kein Konstruktor konnte den Quelltyp übernehmen, oder die Überladungsauflösung des Konstruktors war mehrdeutig".

Ich bin neu in der Verwendung von Vorlagen und STL und kann nicht sagen, was ich falsch mache.

    
Fábio 28.09.2010, 14:41
quelle

5 Antworten

16

Der >>> kann nicht korrekt analysiert werden (es sei denn, Sie haben einen C ++ 0x Compiler).

Ändern Sie zu > > >

Dies:

%Vor%

Sollte sein:

%Vor%

Außerdem gibt es eine Dienstprogrammfunktion, die die Konstruktion von Paaren vereinfacht:

%Vor%

Kann sein:

%Vor%

Versuchen Sie Folgendes:

%Vor%     
Martin York 28.09.2010, 14:44
quelle
2

C ++ wird durch das aufeinanderfolgende "& gt;" wenn Sie die Vorlage schließen, während sie dies als Schichtoperator interpretiert.

Fügen Sie Leerzeichen zwischen den schließenden Vorlagen ein, ändern Sie & gt; & gt; & gt; zu & gt; & gt; & gt;

    
iniju 28.09.2010 14:45
quelle
2

map::insert selbst nimmt ein einzelnes Argument std::pair anstelle von zwei Argumenten. Sie können den Code aufräumen, indem Sie std::make_pair verwenden (was die Argumente der Vorlage von den Funktionsargumenten ableitet), um etwas wie folgt zu erhalten:

%Vor%     
Mike Seymour 28.09.2010 14:48
quelle
0

Sie könnten Ihren Code vereinfachen, indem Sie eine Hilfsfunktion zum Erstellen von Paaren von Paaren erstellen, analog zur std::make_pair -Helferfunktion, die in der Standardbibliothek verfügbar ist. Auch die Verwendung der Karten operator[] für die Einfügung führt zu besser lesbarem Code:

%Vor%     
sth 28.09.2010 14:58
quelle
0

Es hilft, typedefs zu benutzen, wenn man solche Dinge debuggt.

%Vor%     
ttt 28.09.2010 14:56
quelle

Tags und Links