Здравствуйте, Аноним, Вы писали:
А>Компилятор выдает кучю ошибок, а как мне правильно определить функтор для поиска в векторе значения ctest::m_a
У тебя в векторе лежат не указатели — зачем же ты пишешь в operator == указатель? Кроме того, в данном случае operator == не может быть членом функтора — в алгоритме find сравнивается элемент контейнера (слева) и переданное значение (справа), так что объект-функтор должен стоять на втором месте в списке аргументов operator ==. Есле же operator == является членом класса, то функтор (то бишь ссылка на себя) стоит на первом месте.
И вообще, ИМХО, при использовании функторов нагляднее использовать find_if.
В общем вот примеры:
class ctest
{
public:
int m_a;
long m_b;
ctest(int a,long b):m_a(a), m_b(b)
{}
};
class MyFunck
{
int m_t;
public:
MyFunck(int t):m_t(t)
{
}
bool operator () (const ctest& obj) const {return m_t==obj.m_a;}
};
class MyFunck2
{
int m_t;
public:
MyFunck2(int t):m_t(t)
{
}
friend bool operator == (const ctest& obj, const MyFunck2& mf2) {return mf2.m_t==obj.m_a;}
};
typedef std::vector<ctest> vTest;
int main()
{
vTest m_vTest;
m_vTest.push_back(ctest(2,5));
m_vTest.push_back(ctest(3,6));
std::find(m_vTest.begin(),m_vTest.end(),MyFunck2(2));
std::find_if(m_vTest.begin(),m_vTest.end(),MyFunck(2));
return 0;
}