Если вы знаете, что делаете (например, если итераторы взяты из неизменяемого контейнера), вы можете попытаться использовать тот факт, что &*it
должен быть уникальным для каждого элемента:
typedef std::string my_container;
typedef my_container::const_iterator my_iterator;
struct IteratorHasher
{
std::size_t operator()(const my_iterator & it) const
{
return hasher(&*it);
}
private:
std::hash<const char *> hasher;
};
Использование:
int main()
{
std::unordered_map<my_iterator, int, IteratorHasher> mymap;
std::string hello("hello");
mymap[hello.begin()] = 3;
}