Custom types as key for a map - C++

倖福魔咒の 提交于 2019-11-27 20:31:05
unwind

I suspect you need

bool operator<(const Foo& foo1) const;

Note the const after the arguments, this is to make "your" (the left-hand side in the comparison) object constant.

The reason only a single operator is needed is that it is enough to implement the required ordering. To answer the abstract question "does a have to come before b?" it is enough to know whether a is less than b.

It's probably looking for const member operators (whatever the correct name is). This works (note const):

bool operator<(const Foo& foo1) const { return foo_value < foo1.foo_value;}

EDIT: deleted operator> from my answer as it was not needed (copy/paste from question) but it was attracting comments :)

Note: I'm 100% sure that you need that const because I compiled the example.

Note the const after the arguments, this is to make "your" (the left-hand side in the comparison) object constant.

Could you please elaborate on this? Why if you make the member const (which as far as I know means that it can't change object's state - e.g. modify private variables) guarantees that "your" will be the left-hand side?

Could you please elaborate on this? Why if you make the member const (which as far as I know means that it can't change object's state - e.g. modify private variables) guarantees that "your" will be the left-hand side?

I don't yet have the rep to comment on this.

const does not magically ensure that "your" will be the left hand side. The poster was saying that the left hand side (i.e. x in x < y) is the object on which the comparison is being called. Just as you protect y's members from change with the const on the argument to operator<, you also want to protect x's members from change with the const at the end of the method signature.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!