2016-05-25 6 views
-1

so habe ich Probleme mit der Suche func einen Knoten in meinem Vektor von Strukturen mit dem gleichen 'char' Wert wie angegeben zu finden. hier ist mein Code für meine Struktur, ich bin eine Überlastung des Vergleichsoperators, aber noch kein GlückKann <algorithm> nicht finden auf Vektor der Struktur

// STRUCT 
struct alpha 
{ 
    string morse; 
    char letter; 

    // overload the comparison operator 
    bool operator==(const alpha& a) const 
    { 
     return letter == a.letter; 
    } 

}; 

mit und hier ist der Code für meinen Iterator

void testFunc(vector<alpha> &vect) 
{ 
    std::vector<alpha>::iterator it; 

    it = find(vect.begin(), vect.end(),'e'); 
    if(it != vect.end()) 
    { 
    // do anything if we ever get here 
    } 
} 

Jede Hilfe sehr geschätzt werden würde, mein Code nicht selbst kompilieren ich den Fehler

Invalid operands to binary expression ('alpha' and 'int') 
+0

'bool operator == (const code & a) const' was ist ein' code'? – Chad

+0

Wo definierst du den Typ 'code'? – Smeeheey

+0

Bessere Datenstruktur könnte 'std :: map ' oder Hash-Map sein. – Slava

Antwort

3

benötigen Sie einen Gleichheitsoperator zwischen Struktur zu definieren und ein char

bool operator==(const char c) const 
    { 
     return letter == c; 
    } 
+0

du bist erstaunlich! –

+0

Tut 'std :: find() 'garantieren, dass' value' auf der rechten Seite des Ausdrucks ist? – Slava

+0

ja die Funktion verwendet operator ==, um die einzelnen Elemente mit val –

0

std::find kann nicht implizit eine char zu einem alpha konvertieren. Sie müssen einen Konstruktor angeben, der diese Konvertierung durchführt, oder ein Objekt alpha bereitstellen, das Sie für die Funktion find erstellen, oder eine weitere operator==-Funktion hinzufügen, die mit einer char verglichen wird.

Auch die von Ihnen definierte operator== Funktion ist im Vergleich zu einem code Objekt? Soll das richtig sein?

+0

danke Kumpel, behoben, dass "bool Operator == (const Alpha & a) const" immer noch den gleichen Fehler haben :( –

+0

Er sagte, Sie müssen ctor mit einem Argument des Typs 'char' liefern, die für die Typkonvertierung verwendet werden kann. – Slava

+1

Wenn Sie Informationen in Ihrer Antwort haben, die falsch oder irrelevant sind, löschen Sie sie einfach Ich sehe nicht den Punkt, es zu verlassen, aber eine Linie durch sie zu schlagen –

-1
bool operator==(const alpha& a) const 
{ 
    return letter == a.letter; 
} 
0

In find(vect.begin(), vect.end(),'e');, das dritte Argument von find ist kein alpha Objekt. Sie sollten constuct ein solches Objekt vorher:

alpha eKey; 
eKey.letter='e'; 
vector<alpha>::iterator it = find(vect.begin(), vect.end(), eKey); 

Dies wird eine Propper Verwendung der find Funktion machen.