unordered_map 以迭代器为键,将迭代器转换为 long long?
unordered_map with iterators as keys, cast iterator to long long?
不幸的是:
unordered_map<list<int>::iterator, int> foo;
不起作用,编译器说:错误 C2338:C++ 标准不提供此类型的哈希。
不过似乎有一个 64 位整数的散列,所以使用
是否省事
unordered_map<long long, int> foo;
而是简单地将迭代器转换为 long long
?
不,这通常是不可能的。虽然 pointers 可以与整数类型相互转换(稍后会详细介绍),但迭代器不一定是指针,因此不一定允许这种转换。例如,考虑像 istream_iterator
这样的东西,它包装了一个流对象。目前尚不清楚将其转换为 long long
或从 long long
转换意味着什么。如果您尝试以这种方式解决问题,您可能需要改变您的方法。
请注意 - long long
类型实际上并不需要足够大以容纳已转换为整数的指针。特殊类型 intptr_t
和 uintptr_t
保证足够大以存储指针,因此您可能想要开始使用这些类型。不过,您仍然不能将列表迭代器转换为这些类型。
不幸的是:
unordered_map<list<int>::iterator, int> foo;
不起作用,编译器说:错误 C2338:C++ 标准不提供此类型的哈希。
不过似乎有一个 64 位整数的散列,所以使用
是否省事unordered_map<long long, int> foo;
而是简单地将迭代器转换为 long long
?
不,这通常是不可能的。虽然 pointers 可以与整数类型相互转换(稍后会详细介绍),但迭代器不一定是指针,因此不一定允许这种转换。例如,考虑像 istream_iterator
这样的东西,它包装了一个流对象。目前尚不清楚将其转换为 long long
或从 long long
转换意味着什么。如果您尝试以这种方式解决问题,您可能需要改变您的方法。
请注意 - long long
类型实际上并不需要足够大以容纳已转换为整数的指针。特殊类型 intptr_t
和 uintptr_t
保证足够大以存储指针,因此您可能想要开始使用这些类型。不过,您仍然不能将列表迭代器转换为这些类型。