error: no match for 'operator<' in '__x < __y", wenn Sie versuchen zu legen Sie in zwei anzeigen
In code es gibt zwei anzeigen.Ein store-pair-Mädchen und sonstige Standorte, in denen Werte ist die Klasse mit 5 Variablen mit Datentyp string,int,string,int,int.aber beim einlegen der zweiten Karte bin ich immer Fehler g++ error: no match for 'operator<' in '__x < __y", wenn Sie versuchen zum einfügen in map. (Hinweis: Schlüssel und Werte in der ersten Karte die änderungen der Werte,Schlüssel in der Sekunde anzeigen)
Wie es zu lösen.
class Values
{
private:
std::string C_addr;
int C_port;
std::string S_addr;
int S_port;
int C_ID;
public:
Values(std::string,int,std::string,int,int);
void printValues();
};
Values :: Values(std::string Caddr,int Cport,std::string Saddr,int Sport,int Cid)
{
C_addr=Caddr;
C_port=Cport;
S_addr=Swaddr;
S_port=Sport;
C_ID=Cid;
}
void Values::printValues()
{
cout << C_addr<<":" <<C_port<<":" << S_addr <<":" <<S_port << ":"<<C_ID <<endl;
}
map<int, Values> items;
map<Values,int> itemscopy;
Values connection (inet_ntoa(Caddr.sin_addr),ntohs(Caddr.sin_port),inet_ntoa(Saddr.sin_addr),ntohs(Saddr.sin_port),CID);
for(unsigned int key=0;key<=30000; )
{
map<int,Values>::const_iterator itemsIterator=items.find(key);
if(itemsIterator==items.end())
{
items.insert(pair<int, Values> (key, connection));
{
map<Values,int>::const_iterator itemsIterator1;
if(itemsIterator1==itemscopy.end())
itemscopy.insert(pair<Values,int> (connection, key));
}
break;
}
else
{
cout<<"already exist";
key=key+1;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der compiler nicht weiß, in welcher Reihenfolge einfügen von Schlüsseln in die Karte. Sie haben nach der Definition einiger ordnungsrelation für Klasse Werte.
Müssen Sie zum definieren der operator < für Ihre Klasse. Zum Beispiel kann man den folgenden Weg oder etwas anderes
Für Ihre zweite map, die key-Typ ist nicht vergleichbar.
map<Values,int>
ist im wesentlichenmap<Values, int, std::less<Values>, std::allocator<std::pair<const Values, int>
.Sinec Sie nicht über ein
bool operator<
für Ihren Wert geben Sie weniger wird nicht kompiliert.So können Sie entweder definieren Sie eine
bool operator<
für Ihre Klasse oder erstellen Sie die Karte mit einer eigenen Vergleichsfunktion.Implementieren
bool operator<(const Values& other) const
member-Funktion in dieValues
Klasse, die es ermöglichenmap<Values, int>
zum Sortieren der Schlüssel-TypValues
. Die Karte speichert Schlüssel-Wert-Paare und die Schlüssel sortiert sind, so müssen Sie den Vergleichsoperator für Sie. Beim instanziierenmap<Values, int>
Sie sagen, dass SieValues
als Schlüssel und denints
als Werte für die Karte.Hier ist ein kleines Beispiel, wo die C_ID genommen, wie der Vergleich argument für
Values
: