带有自定义类的unordered_map中的FInd函数

时间:2015-04-21 08:11:55

标签: c++ stl find

我正在使用带有自定义类的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/

1 个答案:

答案 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 使用该值作为键...它将值与键相关联,这样可以使用上面讨论的密钥查找该值。