使用迭代器作为键的unordered_map,将迭代器强制转换为long long?

时间:2016-08-08 23:15:21

标签: c++11 casting hashmap iterator c++-standard-library

不幸的是:

unordered_map<list<int>::iterator, int> foo;

不起作用,编译器说:错误C2338:C ++标准没有为这种类型提供散列。

虽然64位整数似乎有一个哈希值,但是使用

也是如此
unordered_map<long long, int> foo;

而是简单地将迭代器强制转换为long long

1 个答案:

答案 0 :(得分:1)

不,这通常是不可能的。虽然指针可以转换为整数类型(稍后更多),但迭代器不一定是指针,因此不一定允许这种转换。例如,考虑包含流对象的istream_iterator之类的东西。目前还不清楚将这种情况转移到long long或从long long转出来是什么意思。如果您尝试以这种方式解决问题,则可能需要更改方法。

作为注释 - 类型intptr_t实际上并不需要足够大以容纳已转换为整数的指针。特殊类型uintptr_t和{{1}}保证足够大以存储指针,因此您可能希望开始使用这些类型。但是,您仍然无法将列表迭代器强制转换为这些类型。