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));
    :   :
}