有没有解释为什么find()算法不适用于地图而且必须使用map :: find?
答案 0 :(得分:17)
map::value_type
(std::pair<const map::key_type, map::mapped_type>
)进行比较,而不是密钥类型。答案 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")