热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++旧版本(不是c++11)-map->覆盖哈希码

如何解决《C++旧版本(不是c++11)-map->覆盖哈希码》经验,为你挑选了1个好方法。

我是一个java家伙..学习c ++.我正在尝试使用c ++中的map std::map.不知何故,我还需要覆盖其哈希码和equals方法.我可以在c ++ 11中使用unordered_map但是如何在旧版本中执行此操作.我知道std::map,第三个参数是operator<但不是哈希码(如in unordered_map).我也知道std::map(有序地图)实际上是一个TreeMap(红黑树).但我怎么做,我想做,使用这个数据结构或旧的c ++版本中的其他一些.



1> dhke..:

如您所述,std :: map类似于Java的TreeMap.在Java中覆盖TreeMap的哈希代码是没有用的,因为它不会被集合使用.相反,TreeMap采用(可选的)附加参数:比较器.

std :: map几乎完全相同,但它没有运行时参数,它有一个编译时模板参数:

template  [...]>
class map;

如您所见,这默认为std :: less.这可以通过两种不同的方式覆盖:

通过选择性特化为您的密钥类型定义新的std :: less.这将在其范围内全球使用,或

在声明地图时提供自定义Comparer结构

版本1:

 template<>
 struct std::less {
   bool operator()(const &Key lhs, const Key &rhs) const
   {
      // compare lhs with rhs
   }
 };

版本2:

 struct CompareKeys {
   bool operator()(const &Key lhs, const Key &rhs) const
   {
      // compare lhs with rhs
   }
 };

 std::map my_map;

C++ 14及更高版本稍微更改了声明,但机制或多或少保持不变.


但不要因为这污染了其他一切.
推荐阅读
author-avatar
朵儿lp_685
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有