Re: поиск в векторе не могу опредилить функтор
От: Bell Россия  
Дата: 04.04.08 08:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Компилятор выдает кучю ошибок, а как мне правильно определить функтор для поиска в векторе значения 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;
}
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.