Ich schrieb ein kleines Programm mit std :: map hier wie folgt.Wie zu stoppen automatische Umwandlung von Int in Float und umgekehrt in Std :: Karte
int main()
{
map<int,float>m1;
m1.insert(pair<int,float>(10,15.0)); //step-1
m1.insert(pair<float,int>(12.0,13)); //step-2
cout<<"map size="<<m1.size()<<endl; //step -3
habe ich eine Karte mit int-Typ als Schlüssel und Schwimmertyp als Wert (Schlüssel-Wert) -Paar für die Karte m1
Schritt-1 Erstellt zur Karte eines normales int-Schwimmerpaares und eingefügt.
Schritt-2 Erstellt ein Cross Float-Int-Paar und eingefügt, um zu mappen. Jetzt weiß ich, dass die implizite Umwandlung dazu führt, dass dieses Paar in die Karte eingefügt wird.
Hier möchte ich nur nicht die implizite Konvertierung stattfinden und Compiler-Fehler sollte angegeben werden.
Welche Art von Änderungen muss ich in diesem Programm/Map machen, damit der comipiler-Flag einen Fehler verursacht, während wir versuchen, Schritt-2-Operation zu machen?
Vielen Dank im Voraus.
Können Sie näher erläutern, warum der dritte Vorlagenparameter erforderlich ist? – Gareth
Ohne es beschwert sich der Compiler, dass es Vorlagenparameter für den ersten Aufruf von map_insert() nicht übereinstimmen kann, da 15.0 ein Double, kein Float ist. – dshin
Dies ist kaum eine Lösung (oder Antwort) auf sein Problem: es ist nur eine völlig andere API, die vermeidet, ein std :: pair alle zusammen zu konstruieren. Obwohl es in diesem Sinne "funktionieren" würde, fällt es auch in die Kategorie Trivial. –