Thread overview
Use classes as keys in associative array
Jun 06, 2020
JN
Jun 06, 2020
ag0aep6g
Jun 06, 2020
ikod
Jun 06, 2020
ikod
June 06, 2020
Is it possible to use different class instances as keys for associative array, but compare them by the contents? I tried to override opEquals but it doesn't seem to work. Basically I'd like this code to work. I know structs would work but I can't use structs for this):

import std.stdio;

class Name
{
    string s;

    this(string s)
    {
        this.s = s;
    }
}

void main()
{
    Name n1 = new Name("John");
    Name n2 = new Name("John");

    int[Name] ages;
    ages[n1] = 50;

    assert(ages[n2] == 50);
}
June 06, 2020
On Saturday, 6 June 2020 at 16:49:29 UTC, JN wrote:
> Is it possible to use different class instances as keys for associative array, but compare them by the contents? I tried to override opEquals but it doesn't seem to work.

You also need toHash.

https://dlang.org/spec/hash-map.html#using_classes_as_key
June 06, 2020
On Saturday, 6 June 2020 at 16:49:29 UTC, JN wrote:
> Is it possible to use different class instances as keys for associative array, but compare them by the contents? I tried to override opEquals but it doesn't seem to work. Basically I'd

May be wrong, but probably you have to override opEquals to Object, not to another class instance.

June 06, 2020
On Saturday, 6 June 2020 at 20:31:36 UTC, ikod wrote:
> On Saturday, 6 June 2020 at 16:49:29 UTC, JN wrote:
>> Is it possible to use different class instances as keys for associative array, but compare them by the contents? I tried to override opEquals but it doesn't seem to work. Basically I'd
>
> May be wrong, but probably you have to override opEquals to Object, not to another class instance.

Oops, sorry, it was answered already