给定一个迭代器,是否可以为该迭代器引用的集合检索/使用正确的比较函数?
例如,假设我正在编写一个通用算法:
template <class InIt, class T>
void do_something(InIt b, InIt e, T v) {
// ...
}
现在,假设我想做一些简单的事情,比如 find v
in [b..e)
。如果b
和e
是 a 的迭代器std::vector
,我可以简单地使用if (*b == v) ...
. 然而,让我们假设b
ande
是 a 上的迭代器std::map
。在这种情况下,我应该只比较keys,而不是 map 中包含的整个 value 类型。
所以问题是,给定映射中的那些迭代器,我如何检索只会比较键的映射比较函数?同时,我不想盲目地假设我正在使用map
其中之一。例如,如果迭代器指向 a set
,我想使用为它定义的比较函数set
。如果他们指向vector
or deque
,我可能不得不使用==
,因为这些容器不会定义比较函数。
哦,差点忘了:我意识到在许多情况下,一个容器只会有一个等价物operator<
而不是operator==
它包含的元素——我完全可以使用它。