我正在使用带有自定义类的std :: unordered_map,如下所示。我已正确初始化并设置了hasher功能。我想知道的是如何使用find函数以及它将返回什么?我很困惑,因为参考文档说,对于unordered_map,值充当关键。
SO想知道迭代器在下面的find函数
的情况下会指向什么class xyz {
public:
int x;
int y;
int z;
//Required stuff
.
.
.
}
// Required Stuff
.
.
.
int main()
{
std::unordered_map<class xyz, std::string, KeyHasher> dummy = {
{ {10, 11, 12}, "example"},
{ {2, 3, 21}, "another"}
};
std::unordered_map<xyz, std::string, keyHasher>::const_iterator got = dummy.find({2, 3, 21});
//What will find return here? Is it the pointer to string "another"?
}
我已经参考了以下内容来自定义类的基本设置。 C++ unordered_map using a custom class type as the key
http://www.cplusplus.com/reference/unordered_set/unordered_set/find/
答案 0 :(得分:1)
给定固定代码,例如:
std::unordered_map<xyz, std::string, keyHasher>::const_iterator got = dummy.find({2, 3, 21});
find
会在这里返回什么?它是指向string
"another"
的指针吗?
它是匹配{key,value} std::pair
的迭代器。
您可以检查find
是否找到了got != dummy.end()
的密钥。
如果找到,则可以使用符号"another"
访问值got->second
,或者以got->first
再次访问密钥。
困惑,因为参考文档说对于unordered_map,值充当关键。
那是错的 - unordered_map
不 使用该值作为键...它将值与键相关联,这样可以使用上面讨论的密钥查找该值。