2016-07-29 3 views
-4

I unten Struktur haben Sie definiertProbleme mit Karte

struct WayStruct{ 
    double ID; 
    string Neighbours; 
}; 

und unterhalb Karte

map <double,WayStruct> WayMap; 

Um ein neues Element zu dieser Karte I

WaysFind.ID=999; 
WaysFind.Neighbours="test"; 
WayMap.insert(1234,WaysFind); 

Allerdings kann ich hinzufügen, nicht Holen Sie sich das kompiliert. Dev-C++ endet in Fehler mit

[Error] no matching function for call to 'std::map<double, WayStruct>::insert(double, WayStruct&)' 

Kann jemand sagen, was ich hier falsch mache?

Als ich noch make_pair Dev-C++ kehrte mit

In instantiation of 'std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&) [with _U1 = double; _U2 = int; _T1 = const char; _T2 = WayStruct]': 
    required from here 
111 39 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.7.1\include\c++\bits\stl_pair.h [Error] no matching function for call to 'WayStruct::WayStruct(const int&)' 

in Datei stl_pair.h

+2

Haben Sie versucht, die Dokumentation zu lesen? – Slava

+0

Hallo Slava, ja ich habe. Ich habe das Netz schon seit einer Weile durchsucht. – HB1963

+0

Es gibt keine 'insert (key, value)' Methode von 'std :: map', also würde ich den Compiler wahrscheinlich auch beschweren. – WhozCraig

Antwort

1

Sie haben wie folgt verwenden:

WayMap.insert(std::pair<double,WayStruct>(1234,WaysFind)); 

Demo: http://coliru.stacked-crooked.com/a/df5e4413eceb68be

Wenn Sie einen C++ 11 oder höher kompatiblen Compiler haben, funktioniert das auch:

WayMap.insert(std::make_pair(1234,WaysFind)); 
+0

'make_pair' war verfügbar vor C++ 11 – Slava

+0

Ich habe versucht, make_pair, aber Dev-C++ begann in der Header-Datei stl_pair.h zu beschweren. Ich werde meine Frage mit der Fehlermeldung – HB1963

5

std::map::insert() Überlastung, die Sie übernimmt einen Parameter des Typs zu verwenden versuchen std::map:value_type die std::pair nicht zwei ist. So gemeinsamen Weg Wert Karte einzufügen ist:

WayMap.insert(std::make_pair(1234,WaysFind)); 

für C 11 ++ Sie die Art und Weise einfügen können Sie emplace stattdessen versucht, mit:

WayMap.emplace(1234, WaysFind); 

Auf Seite beachten Sie mögliche Probleme aufpassen sollten mit double als Schlüssel.

+0

bearbeiten Ich habe es geschafft, es zu lösen. Eine Frage allerdings. Welche Probleme könnten bei Verwendung eines Doppels als Schlüssel auftreten? – HB1963

+0

@ HB1963 Lesen Sie diesen Artikel https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ – Slava

+0

@ HB1963 Auch dieses SO Thema kann hilfreich sein http: // stackoverflow. com/questions/24937085/zuverlässig-mit-Doppel-als-stdmap-Schlüssel – Slava