Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #8189

Problem with functor, maybe I need operator== for my struct?

From Fencer <no.i.dont@want.mail.from.spammers.invalid>
Newsgroups comp.lang.c++
Subject Problem with functor, maybe I need operator== for my struct?
Date 2011-07-25 13:25 +0200
Message-ID <99525sF1frU1@mid.individual.net> (permalink)

Show all headers | View raw


Hello, I am very rusty in C++ and I'm having some problems: I have a 
std::set<SomeClass> and I need to look through the set to find if any of 
the instances of SomeClass that it contains has a particular value for 
one of its data members. I know I could simply iterate through the set 
myself and check every SomeClass instance if any of them is a match, but 
I tried to do it using functors instead.
The following simplified test program does not build, and it seems to be 
that operator== is missing for the struct s1. Could you gurus help me 
explain why my test program does not build and how I should fix it?

#include <algorithm>
#include <functional>
#include <set>

using namespace std;

struct s1
{
    s1(int u, int v) : u(u), v(v) {}

    int u, v;
};

struct OnV : public unary_function<s1, bool>
{
    explicit OnV(int v) : v(v) {}

    bool operator()(s1 const& inst) const
    {
       return v == inst.v;
    }

    int v;
};

int main()
{
    set<s1> a_set;

    find(a_set.begin(), a_set.end(), OnV(4711));
}

$ g++ -Wall -Wextra -std=c++98 -pedantic functor.cpp -o functor.exe
/usr/lib/gcc/i686-pc-cygwin/4.3.4/include/c++/bits/stl_algo.h: In 
function ‘_InputIterator std::__find(_InputIterator, _InputIterator, 
const _Tp&, std::input_iterator_tag) [with _InputIterator = 
std::_Rb_tree_const_iterator<s1>, _Tp = OnV]’:
/usr/lib/gcc/i686-pc-cygwin/4.3.4/include/c++/bits/stl_algo.h:3814: 
instantiated from ‘_IIter std::find(_IIter, _IIter, const _Tp&) [with 
_IIter = std::_Rb_tree_const_iterator<s1>, _Tp = OnV]’
functor.cpp:30:   instantiated from here
/usr/lib/gcc/i686-pc-cygwin/4.3.4/include/c++/bits/stl_algo.h:151: 
error: no match for ‘operator==’ in 
‘__first.std::_Rb_tree_const_iterator<_Tp>::operator* [with _Tp = s1]() 
== __val’

Thank you for reading and thanks for any help! Even though I could use 
the alternative solution I mentioned above that does not involve 
functors, I wanted to know what I did wrong with my functor and 
hopefully learn something from your replies.

- Fencer

Back to comp.lang.c++ | Previous | NextNext in thread | Find similar | Unroll thread


Thread

Problem with functor, maybe I need operator== for my struct? Fencer <no.i.dont@want.mail.from.spammers.invalid> - 2011-07-25 13:25 +0200
  Re: Problem with functor, maybe I need operator== for my struct? Leigh Johnston <leigh@i42.co.uk> - 2011-07-25 12:38 +0100
    Re: Problem with functor, maybe I need operator== for my struct? Fencer <no.i.dont@want.mail.from.spammers.invalid> - 2011-07-25 13:40 +0200
  Re: Problem with functor, maybe I need operator== for my struct? Saeed Amrollahi <amrollahi.saeed@gmail.com> - 2011-07-25 05:14 -0700
    Re: Problem with functor, maybe I need operator== for my struct? Leigh Johnston <leigh@i42.co.uk> - 2011-07-25 13:52 +0100
      Re: Problem with functor, maybe I need operator== for my struct? Saeed Amrollahi <amrollahi.saeed@gmail.com> - 2011-07-25 06:46 -0700
        Re: Problem with functor, maybe I need operator== for my struct? Leigh Johnston <leigh@i42.co.uk> - 2011-07-25 15:00 +0100
          Re: Problem with functor, maybe I need operator== for my struct? Saeed Amrollahi <amrollahi.saeed@gmail.com> - 2011-07-25 07:27 -0700

csiph-web