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