2009-04-20 13 views
2

Gibt es eine Möglichkeit, STL-Algorithmen wie find() und find_if() in einem Container von Objekten zu verwenden? Ex.:With find() finden Sie das Element mit Namen "abc" in einem Vektor der Klasse Alfhabitic.STL-Algorithmus in Klasse

Antwort

7

Sie können ein Vergleichsprädikat (Funktor) definieren. Hier ist eine generische Implementierung:

struct AlphabeticNameComp 
{ 
    AlphabeticNameComp(const std::string& toCompare) 
     : toCompare_(toCompare) { } 

    bool operator()(const Alphabetic& obj) const 
    { 
     return toCompare_ == obj.name(); 
    } 

private: 
    const std::string toCompare_; 
}; 

In einem Vektor in alphabetischer Reihenfolge Elemente

std::vector< Alphabetic> vect; 

Sie eine Suche ausführen können wie:

std::find_if(vect.begin(), vect.end(), AlphabeticNameComp("abc")); 
1

Sie ein operator==() für die Klasse definieren Alfhabetic die passt nur das Datenelement abc

etwas wie folgt aus:

bool operator==(const Alfhabetic& a, const Alfhabetic& b) 
{ 
    return (a.abc == b.abc); 
} 

und dann mit abc als den gewünschten Wert ein Alfhabetic Instanz initialisiert zu finden.