C++11 以迭代器为键的无序_映射,将迭代器强制转换为long?

C++11 以迭代器为键的无序_映射,将迭代器强制转换为long?,c++11,casting,hashmap,iterator,c++-standard-library,C++11,Casting,Hashmap,Iterator,C++ Standard Library,不幸的是: unordered_map<list<int>::iterator, int> foo; unordered_-map-foo; 不起作用,编译器说:错误C23 38:C++标准不提供这种类型的哈希。 但似乎有一个64位整数的散列,所以是否保存以供使用 unordered_map<long long, int> foo; unordered_-map-foo; 相反,只需将迭代器强制转换为long?否,这通常是不可能的。虽然指针可以从整数类

不幸的是:

unordered_map<list<int>::iterator, int> foo;
unordered_-map-foo;

不起作用,编译器说:错误C23 38:C++标准不提供这种类型的哈希。 但似乎有一个64位整数的散列,所以是否保存以供使用

unordered_map<long long, int> foo;
unordered_-map-foo;

相反,只需将迭代器强制转换为
long

否,这通常是不可能的。虽然指针可以从整数类型转换到整数类型(稍后将详细介绍),但迭代器不一定是指针,因此不一定允许这种转换。例如,考虑一个类似于<代码> istrAMMyTyror < /C> >,它封装一个流对象。目前尚不清楚将此内容转换为
long
,或从
long
转换此内容意味着什么。如果你想用这种方式解决问题,你可能需要改变你的方法


需要注意的是,
long
类型实际上并不需要足够大才能容纳已转换为整数的指针。特殊类型
intptr\u t
uintptr\u t
保证足够大以存储指针,因此您可能希望开始使用这些类型。但是,您仍然无法将列表迭代器强制转换为这些类型。

使用迭代器指向的对象的地址如何?也许我可以用它作为一个键?如果你不需要像迭代器一样对待指针,那么它应该可以工作。出于好奇,你想做什么?您可能想发布一个单独的问题来描述您的目标,因为我怀疑您可能缺少一种更简洁的方法来解决这个问题。我想遍历一个重对象图,因此我有一个指向这些对象的迭代器向量,但我也需要用于广度/深度优先搜索的反向映射。可能有一些高效的图形库,但我只需要这个遍历函数。我建议将其作为一个单独的问题来问,详细描述您正在尝试做什么,以及您目前正在如何解决它。这将使你的问题更具可视性,并可能让人们提出更好的方法来实现你的目标。