4

I've declared a structure like this ->

struct data{
    int x,y;
    bool operator < (const data& other) {
        return x<other.x or y<other.y;
    }
};

Now I want to map it as a key and with a bool value.

int main()
{
    data a;
    map<data,bool>mp;
    a.x=12, a.y=24;
    mp[a]=true;
}

The last line gives me this error ->

error: passing 'const' as 'this' argument of 'bool data::operator<(const data&)' discards qualifiers

How can I fix this ??

jbsu32
  • 1,036
  • 1
  • 11
  • 31

1 Answers1

11

std::map<Key, Value> internally stores them as std::map<const Key, Value>. The important thing here is that the Key is const.

So, in your example, data is const, but operator< is not! You cannot call a non-const method from a const object, so the compiler complains.

You'll have to specify operator< as const:

bool operator<(const data& other) const { /*...*/ }
                                  ^^^^^
Rakete1111
  • 47,013
  • 16
  • 123
  • 162