在C++中理解映射作为java开发者
在Java中,我们有hashCode()和equals()等方法,映射使用这些方法来标识每个对象。C++没有这样的基本方法,每个对象都默认执行。p>
地图现在如何使用自定义对象作为键值
<>编辑:没有复制,因为它特别针对那些java特定的接口方法,那些以前没有做过C++的人会寻找< /p>你可以在下面搜索框中键入要查询的问题!
在Java中,我们有hashCode()和equals()等方法,映射使用这些方法来标识每个对象。C++没有这样的基本方法,每个对象都默认执行。p>
地图现在如何使用自定义对象作为键值
<>编辑:没有复制,因为它特别针对那些java特定的接口方法,那些以前没有做过C++的人会寻找< /p>
# 1 楼答案
C++映射是一个有序映射,而不是哈希映射,它是用布尔表达式COMP(A,B)来比较关键值的。默认值是执行(A& lt;b)比较的更少,比较在C++中可以被类重载。备用贴图可以使用不同的表达式
# 2 楼答案
map是一个模板类。密钥必须匹配称为严格弱排序的特定概念,该概念保证:
下面是一个自定义类型作为键的示例:
也就是说,std::map并不是Java的哈希映射的完全等价物。C++11对此有
std::unordered_map
。使用unordered_map
,您可以为自己的类型定义自己的std::hash模板,以将自定义类型持久化为哈希键# 3 楼答案
C++中的MAP不是HASMAP,而是一个有序映射(通常是红黑树)。使用comparator函数按键对条目进行排序。在默认实现中,键必须重载
operator<
,但您可以指定自己的比较器函数这里参见C++映射信息:http://en.cppreference.com/w/cpp/container/map
# 4 楼答案
C++ +{CD1>}是一个有序映射,其要求意味着它被实现为一个自平衡二叉搜索树(通常是红黑树)。这意味着键类型必须具有某种类型的strict weak ordering,可以是
less-than
运算符的形式,也可以是用户定义的比较函子关于如何使用带有用户定义类型的
std::map
作为键(参见one example here),有很多SO帖子C++11有
std::unordered_map
,这是一个对键类型有不同要求的哈希表(具体来说,需要一个哈希函数和相等比较)# 5 楼答案
Java的哈希映射的时间复杂度为O(1)。在C++中,基于红黑树的地图具有O(Logn)的时间复杂度。p>
CSLM是
hread-safe
、concurrent
和TreeMap
不是。 在JDK1.6中添加了CSLM见文件:Java equivalent of C++ std::map?
# 6 楼答案
首先,C++中的一个^ { CD1>}通常是一个红黑树,而不是哈希表。C++11中还有一个名为
std::unordered_map
的哈希映射。默认情况下,它使用operator<
来比较元素。您还可以插入自定义比较器,该比较器可以使用您想要的任何东西进行比较。这是通过对std::map
使用可选的第三个模板参数来完成的