2016-09-21 1 views
1

Ich habe eine enum, eine Struktur mit diesen enum als Mitglied und einen Vektor dieser Strukturen als solche:Suche nach einer Enum in einer Struktur in einem Vektor in C++

enum TickerType { tt1, tt2, tt3 }; 
struct Ticker { 
    std::string name; 
    TickerType type; 
}; 
std::vector<Ticker> vect; 

Ich mag für ein suchen Element in vect, das vom Typ tt1 ist. Für welche erklärte ich

struct find_ticker 
{ 
    const TickerType type; 
    find_ticker(TickerType type) : type(type) {}; 
    bool operator() (const Ticker& ticker) const 
    { 
    return ticker.type == type; 
    } 
}; 

und sah mit:

if (std::find (vect.begin(), vect.end(), find_ticker (tt1)) != tickers.end()) 

Aber ich bekomme

error: no match for ‘operator==’ (operand types are ‘Dfp::Ticker’ and 
‘const {anonymous}::find_ticker’) || { return *__it == _M_value; } 

* Dfp ist der globale Namensraum der Anwendung und find_ticker definiert in ein anoymous Namespace in der Implementierungsdatei, wo ich es brauche

+1

Vect mit Tickern vergleichen? – billz

Antwort

4

Die Funktion std::find ist die falsche Funktion, die aufgerufen werden soll, wenn Sie ein Prädikat suchen möchten. std::find dient zum Suchen basierend auf einem Wert, sodass Sie versuchen, einen Wert im Vektor zu finden, der dem Objekt find_ticker entspricht.

Sie sollten stattdessen std::find_if verwenden.

+0

Hoppla wie habe ich das vermisst! danke –

+0

oder du könntest global 'bool operator == (const Ticker & lhs, const Ticker & rhs)' definieren und die 'find' Funktion benutzen (aber vielleicht wäre dieser Vergleich anders als nur' enum' vergleichen) – hauron

Verwandte Themen