hash_map 这个非stl的容器,基于hash table实现

网上很多资料博客,照搬照抄很多,主要讲述了它和关联容器(基于红黑数)之间的关系以及区别,比如map。楼主是一个不喜欢一上来就看那么多文字的人,楼主喜欢先了解怎么用,然后再去进行原理的分析,但是这样的教我使用的demo实在难找,so 才有了这篇文字。


头文件

 linux下:

#include <ext/hash_map>

windows下好像是:

#include <hash_map>


using namespace __gnu_cxx;
using namespace std;


struct str_myhash{
   size_t operator()(const string& key) const  // const function  //reload operator()  //param is hash key type
   {
        printf("-----------str_myhash-------------\n");
        return __stl_hash_string(key.c_str());
   }//The result type must be size_t
};


struct str_myeq
{
  bool operator()(string s1, string s2) const
  {
      printf("===========str_myeq================\n");
      return (s1==s2)?true:false;
  }
};


    hash_map<string, string, str_myhash, str_myeq>  myhashmap;  // function object ,类型str_myhash, str_myeq 对象调用成员函数--运算符重载

   myhashmap["123"] = "yuebuquan";   // 根据key生成hash_key 赋值
   cout<< myhashmap["123"] <<endl;    // 根据key生成hash_key 然后调用查询进行比较

-----------------------out print---------------------------------------------------

-----------str_myhash-------------
-----------str_myhash-------------
===========str_myeq================


承上:

用[]进行hash_map数据插入其实是先查找是否有相同的有就修改,没有就添加 。

效率不同于如下语句(是直接插入,map也是一样)

myhashmap.insert(make_pair("456", "haha"));

myhashmap.insert(pair<string, string>("345", "test"));



struct myless
   {
       bool operator() (const string& str1, const string& str2) const
       {
            cout<<"-------------in myless-------------" <<endl;
            return str1<str2;
       }
   };

  map<string, string, myless> mymap;

   mymap["test1"] = "data1";
   //mymap["test1"] = "data2";  //先找,到后是修改,找不到是插入
   mymap.insert(make_pair("test1", "data2")); //直接插入,因为key相同的已经存在,所以插入会失败
   cout<<mymap["test1"]<<endl; // 用[] 和用insert结果就不一样了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字正腔圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值