2016-09-21 75 views
1

枚举在载体我有一个enum,与此enum作为构件,因此这些结构的载体的结构:搜索用于在结构中的C++

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

我要搜索的元素vect,其类型为tt1。为此我宣布

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

,并期待有:

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

,但我得到

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

*广告管理系统正在应用的全局命名空间和find_ticker被定义在我需要它的实现文件中的一个匿名命名空间

+1

比较vect? – billz

回答

4

std::find函数是错误的函数,如果您想使用谓词查找。 std::find用于查找基于某个值的值,因此您试图在矢量中找到等于find_ticker对象的值。

您应该改用std::find_if

+0

Ooops我怎么错过了!谢谢 –

+0

或者你可以定义全局'bool operator ==(const Ticker&lhs,const Ticker&rhs)'并使用'find'函数(但也许这种比较不同于enum' compare) – hauron