Listing 1
class StockTrade { public: StockTrade() {}; virtual ~StockTrade() {}; bool operator==(const StockTrade& rhs) { return &rhs == this; }; string m_sStock; double m_fPrice; }; struct stock_traded_at : public unary_function<StockTrade,bool> { stock_traded_at(const char* Stock, double Price) : m_sStock(Stock&&strlen(Stock)?Stock:""), m_fPrice(Price) {}; bool operator()(const StockTrade& rhs) const { return rhs.m_fPrice == m_fPrice && 0 == m_sStock.compare(rhs.m_sStock); } private: string m_sStock; double m_fPrice; }; int main() { : : typedef vector<StockTrade> StockTrades; StockTrades trades; : : StockTrades::iterator itTrade = find_if(trades.begin(),trades.end(),stock_traded_at("SDS",30.0)); : : }