不幸的是:
unordered_map<list<int>::iterator, int> foo;
不起作用,编译器说:错误C2338:C ++标准没有为这种类型提供散列。
虽然64位整数似乎有一个哈希值,但是使用
也是如此unordered_map<long long, int> foo;
而是简单地将迭代器强制转换为long long
?
答案 0 :(得分:1)
不,这通常是不可能的。虽然指针可以转换为整数类型(稍后更多),但迭代器不一定是指针,因此不一定允许这种转换。例如,考虑包含流对象的istream_iterator
之类的东西。目前还不清楚将这种情况转移到long long
或从long long
转出来是什么意思。如果您尝试以这种方式解决问题,则可能需要更改方法。
作为注释 - 类型intptr_t
实际上并不需要足够大以容纳已转换为整数的指针。特殊类型uintptr_t
和{{1}}保证足够大以存储指针,因此您可能希望开始使用这些类型。但是,您仍然无法将列表迭代器强制转换为这些类型。