正如标题所说,是否允许?如果没有,他们是否共享相同的接口或抽象类?我没有找到任何在线文件的参考。但看起来unordered_map和map都使用相同的功能。
答案 0 :(得分:13)
不,它们完全不同,即使你用reinterpret_cast
强制它,它也会在运行时出现可怕的错误(即可怕的未定义行为)。
它们都是STL容器,因此故意具有一致的接口。 这并不意味着它们在内部是相同的。
答案 1 :(得分:7)
他们是两种不相关的类型。如果你想基于另一个构造一个,你需要使用带有迭代器范围的构造函数(C ++ 11):
template <class InputIterator>
map(InputIterator first, InputIterator last,
const Compare& comp = Compare(), const Allocator& = Allocator());
template <class InputIterator>
unordered_map(InputIterator f, InputIterator l,
size_type n = see below,
const hasher& hf = hasher(),
const key_equal& eql = key_equal(),
const allocator_type& a = allocator_type());
答案 2 :(得分:1)
STL类不使用虚函数;没有一致的基类可以通过(即,没有相当于Java的java.util.Map
)。您不能在std::unordered_map
和std::map
之间投射,而不能在HashMap
和TreeMap
之间投射 - 它们是完全不同的类型,不能等效使用。
如果您希望函数能够获取多种类型的STL容器,只需使用模板函数:
template<typename Map>
void somefunc(Map &mymap) {
// ...
}
答案 3 :(得分:-2)
你可以将一件事重新诠释给任何其他东西,即使它毫无意义。如果你强制它,编译器不会阻止你,这实质上是重新解释强制转换。将地图投射到unordered_map是没有意义的。不行。
为什么要将地图投射到unordered_map?它们具有相同的界面。通过施展它你什么都得不到。