我可以使用成员变量作为hash_set/hash_map的键吗?

Abu*_*Abu 5 c++ hash hashmap

我有一个这样的课:

class Foo
{
   long long Id;
   string x;
   string y;
   // other member variables and functions
};
Run Code Online (Sandbox Code Playgroud)

我想将它存储在hash_set(或hash_map)中,但使用Id成员变量作为插入和搜索的键.我不知道怎么能这样做.我想到了以下方法,但没有一个真的很好:

1)我可以编写一个自定义哈希函数,它将使用Id对对象进行哈希处理,但是我不能使用该find()方法hash_set通过Id(long long)查找项目,因为它需要Foo传入一个对象.

2)我可以复制Id并创建一个hash_map<long long, Foo>而不是a hash_set<long long, Foo>但我有1亿个这些对象的实例,所以我宁愿不复制Id字段.

3)我可以将Id字段移到外面Foo然后再移动hash_map<long long, Foo>,但是它会有点混乱,因为Id在内部由类使用,最好保持它Foo.

有任何想法吗?我正在寻找的是一种存储Foo对象的方法,但能够在hash_set使用a long long(通过Id)中搜索它们.

谢谢!

cas*_*nca 0

这可能不是一个特别优雅的解决方案,但它有效:为您的类定义一个operator <(也operator ==如 CashCow 建议的那样)根据字段对对象进行排序Id,然后当您想要执行 a 时find,传入一个包含以下内容的虚拟对象:您Id正在寻找的。