为什么STL算法find()在地图上不起作用?

时间:2009-07-22 21:24:18

标签: c++ stl map

有没有解释为什么find()算法不适用于地图而且必须使用map :: find?

5 个答案:

答案 0 :(得分:17)

  1. 它适用于地图,但您需要与map::value_typestd::pair<const map::key_type, map::mapped_type>)进行比较,而不是密钥类型。
  2. 因为map.find接受一个键并返回一个键/值对迭代器。

答案 1 :(得分:3)

如其他地方所述,它确实有效,但类型是键/值对,因此您需要提供一个函子/函数来进行比较。 (您可能也可以使用自定义运算符==()重载,但我从未尝试过这样的事情)

但是你可能确实想要使用map成员函数find(),因为它会给出O(logN)查找,算法std :: find()是O(N)。

附加:我认为您也可以使用std :: equal_range / lower_bound / upper_bound()和地图确定,这些也是O(LogN)。

答案 2 :(得分:1)

你的意思是equal_range吗?使用映射,您应该使用成员函数lower_bound,upper_bound和equal_range。 std等价物可以提供对数的对数,但它们需要线性时间来遍历容器的元素。

答案 3 :(得分:1)

您应该阅读Scott Meyers的“Effective STL”,了解有关这些主题的更多信息。

“第43项:将成员函数更喜欢具有相同名称的算法”

为什么成员函数存在以及为什么要使用它。

答案 4 :(得分:0)

Scott Meyers还建议使用STL算法,而不是编写自己的循环(2001版第43项)。对于简单类型,您应该只能使用

find(mmap.begin(), mmap.end(), "value")