理解作为Java开发人员在C++中的Map

Mar*_*ies 7 c++ java equals map hashcode

在Java中,我们使用了hashCode()和equals()等方法,地图使用这些方法来标识每个对象.C++没有这样的基本方法,默认情况下每个对象都实现.

地图现在如何使用自定义对象作为键值?

编辑:没有重复,因为它特别针对那些特定于Java的接口方法,以前没有用C++做过的人会寻找

Dav*_*vid 7

首先,std::mapC++中的一般是红黑树,而不是哈希表.在C++ 11中还有一个名为哈希映射的哈希映射std::unordered_map.默认情况下,它用于operator<比较元素.您还可以插入自定义比较器,可以使用您想要的任何内容进行比较.这是通过使用可选的第3个模板参数来完成的std::map.


jua*_*nza 6

C++ std::map是一个有序映射,其要求意味着它被实现为自平衡二进制搜索树(通常是红黑树).这意味着密钥类型必须具有某种严格的弱排序,它可以以less-than运算符的形式出现,或者作为用户定义的比较仿函数.

有很多关于如何使用std::map用户定义类型作为键的SO帖子(参见这里的一个例子).

C++ 11有std::unordered_map一个哈希表,它对键类型有不同的要求(具体来说,需要哈希函数和相等比较)