精华内容
下载资源
问答
  • C语言哈希表用法

    千次阅读 多人点赞 2020-07-12 11:56:03
    哈希表在头文件"uthash.h"中已经有了,只需要简单学习一下用法即可。 1,哈希结构体 #include "uthash.h" typedef struct { int key; int value; UT_hash_handle hh; } Hash; Hash *hash = NULL; 其中UT_...

    为了认证C语言专业级上机编程,我特地学习了C语言的哈希表。

    哈希表在头文件"uthash.h"中已经有了,只需要简单学习一下用法即可。

     

    1,哈希结构体

    #include "uthash.h"
    typedef struct {
        int key;
        int value;
        UT_hash_handle hh;
    } Hash;
    Hash *hash = NULL;

    其中UT_hash_handle是头文件"uthash.h"中定义的,然后Hash结构体是自定义的。

    key的类型可以是int, char *, char[],void* 这4种,value可以是任意类型

     

    2,增删查

    // 增加
    void add(int key, int value)
    {
        Hash *s = NULL;
        s = (Hash *)malloc(sizeof(Hash));
        s->key = key;
        s->value = value;
        HASH_ADD_INT(hash, key, s);
    
    }
    // 查找
    int find(int key)
    {
        Hash *s = NULL;
        HASH_FIND_INT(hash, &key, s);
        
        if (s != NULL) {
            // 查找到结果
            return 1;
        } else {
            return 0;
        }
    }
    // 删除
    void delete (Hash *s)
    {
        HASH_DEL(hash, s);
        free(s);
        s = NULL;
    }

    其中HASH_ADD_INT、HASH_FIND_INT、HASH_DEL都是标准函数,其他都是自定义代码。

    注意,插入之前要先查找确认没有这个元素。

    如果要修改已经存在的键值对,要先删除再插入。

     

    3,遍历,清空,计数

    // 清空
    void clearAll()
    {
        Hash *s, *tmp;
        HASH_ITER(hh, hash, s, tmp)
        {
            delete (s);
        }
    }
    //计数
    int cnt = HASH_COUNT(hash);

    其中,HASH_ITER是标准宏,HASH_COUNT是标准函数,其他都是自定义代码。

     

    4,其他类型的key

    //char* key HASH_ADD_KEYPTR
    //char key[100] HASH_ADD_STR
    //void* key HASH_ADD_PTR
    //void* key HASH_FIND_PTR

    除了这4个函数不一样之外,其他函数都一样。

    展开全文
  • C++哈希表用法

    千次阅读 2019-08-31 11:08:18
    hash表用法,记得几个关键的, 引入 #include 定义 unordered_map, string> unomap; 引入的时候可以定义初始化,例如 unordered_map,string> unomap ={{1,"dd"},{2,"ssss"}}; 打印查找: ...
    #include<iostream>
    #include<unordered_map>
    
    using namespace std;
    
    int main(){
        unordered_map<int,string> unomap;//创建一个key为string类型,value为int类型的unordered_map
        int key = 4;
        string value = "123";
        unomap = {{1,"2"},{2,"3"}};
        unomap.emplace(key,value);
        unomap.emplace(7, "456");//也可以直接写上key和value的值
        cout<<unomap[7]<<endl;
    
        for(auto x: unomap){
            cout<<x.first<<" "<<x.second<<endl;
        }
    
        for(auto x: unomap){
            cout<<unomap[x.first]<<endl;
        }
        return 0;
    }
    

    hash表用法,记得几个关键的,

    引入

    #include <unordered_map>

    定义

    unordered_map<int, string> unomap;

    引入的时候可以定义初始化,例如

    unordered_map<int,string> unomap ={{1,"dd"},{2,"ssss"}};

    打印查找:

    for(auto x: unomap){

          cout<<unomap[x.first]<<endl;

          cout<<x.second<<endl;//以value值输出

    }

    myMap.insert(pair<int, string>(3,"陈二"));//插值用pair的形式

    myMap.insert(pair<int,string>(3,"陈二"));//以pair的形式插入

    myMap[2] = "zhangsan";//类比python字典,有加替换,value,没有直接创建一个出来。

     

    展开全文
  • C++unordered_map哈希表用法

    千次阅读 多人点赞 2020-02-01 17:44:31
    unordered_map 头文件:#include<...创建 unordered_map<key,value> Map_name; 插入元素 ①a[key]=value;                ② Map_name.insert(pair<int,i...

    unordered_map

    头文件:#include<unordered_map>

    创建表 unordered_map<key,value> Map_name;
    插入元素 ①a[key]=value;
                   ② Map_name.insert(pair<int,int>(key,value));
                   ③ unordered_map<int,int>Map_name={{key1,value1},{key2,value2}};
    查找键值 table_name.find(key)

    当已经存在键值的情况返回end()

    创建迭代器 unordered_map<key,value>::iterator iterator_name;
    用迭代器访问元素的键值 it->first
    用迭代器访问元素的键值对应的元素值 it->second

    在这里插入图片描述

    思路:把数组里面每一个不同的元素放在哈希表中,元素值用key表示,元素出现的次数用value表示,比如:示例1哈希表的结构是{{3,2},{2,1}};示例2哈希表结构是{{1,3},{3,2},{2,3}};

    最后一步:用迭代器遍历整个哈希表,把值大于nums.size()/3的元素插入到数组里

    class Solution {
    public:
        vector<int> majorityElement(vector<int>& nums) {
            vector<int> res;
            int n=nums.size()/3;
            unordered_map<int,int> a;
            unordered_map<int,int>::iterator it; 
            for(int i=0;i<nums.size();i++)
            {
                if(a.find(nums[i])==a.end())
                {
                    a[nums[i]]=1;
                }
                else
                {
                    a.at(nums[i])+=1;
                }
            }
            it=a.begin();
            while(it!=a.end())
            {
                if(it->second>n) 
                {
                    res.push_back(it->first);
                }
                it++;
            }
            return res;
        }
    };
    
    展开全文
  • C# 哈希表用法实例

    2011-07-04 21:07:39
    文章出处:http://developer.51cto.com/art/200908/145363.htmC#哈希表,可能对于很多同行来说已经很熟悉.刚开始接触时有点陌生,后来用多了也就熟了.当然网上关于这一个知识点的介绍很多,不过这并不妨碍我个人...

    文章出处:


    http://developer.51cto.com/art/200908/145363.htm


    C#哈希表,可能对于很多同行来说已经很熟悉.刚开始接触时有点陌生,后来用多了也就熟了.当然网上关于这一个知识点的介绍很多,不过这并不妨碍我个人对此作出自己的总结与理解.

    在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对.

    因此在用的过程中,需引用:using System.Collections;下面列一下常用的用法,右边给出相应的注释.

    一.常用的方法:

     
    1. Hashtable hshTable = new Hashtable(); //  创建哈希表   
    2.  
    3.         hshTable .Add("Person1",  "zhanghf");  //  往哈希表里添加键值对   
    4.  
    5.         hshTable .Clear();  //移除哈希表里所有的键值对   
    6.  
    7.         hshTable .Contains("Person1");   //判断哈希表里是否包含该键   
    8.  
    9.         string name = (string)hshTable["Person1"].ToString(); //取哈希表里指定键的值   
    10.  
    11.         hshTable.Remove("Person1"); //  删除哈希表里指定键的键值对   
    12.  
    13.         IDictionaryEnumerator en = hshTable.GetEnumerator();  //  遍历哈希表所有的键,读出相应的值  
    14.         while (en.MoveNext())  
    15.             {  
    16.                string str = en.Value.ToString();  
    17.             } 

    二.遍历C#哈希表:

    遍历哈希表需要用到DictionaryEntry Object,代码如下:

     
    1. for(DictionaryEntry de in ht) //ht为一个Hashtable实例  
    2. {  
    3.  Console.WriteLine(de.Key);//de.Key对应于key/value键值对key  
    4.  Console.WriteLine(de.Value);//de.Key对应于key/value键值对value   
    5.  

    三.对C#哈希表进行排序

    对哈希表进行排序在这里的定义是对key/value键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:

     
    1.  ArrayList akeys=new ArrayList(ht.Keys); //记得导入System.Collections  
    2.  akeys.Sort(); //调用了akeys的按字母顺序进行排序Sort,这个很容易单独实现  
    3.  for(string skey in akeys)  
    4.  {  
    5. Console.Write(skey + ":");  
    6. Console.WriteLine(ht[skey]);//排序后输出  
    7.  }  


    文章出处http://www.cnblogs.com/liuwenjun830/archive/2006/07/28/462182.html


    一,哈希表(Hashtable)简述

      在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.

    二,哈希表的简单操作

     在哈希表中添加一个keyvalue键值对:HashtableObject.Add(key,value);
     在哈希表中去除某个keyvalue键值对:HashtableObject.Remove(key);
     从哈希表中移除所有元素:           HashtableObject.Clear(); 
     判断哈希表是否包含特定键key:      HashtableObject.Contains(key);
     下面控制台程序将包含以上所有操作:
    using System;
    using System.Collections; file使用Hashtable时,必须引入这个命名空间
    class hashtable
    {
      public static void Main()
      {
      Hashtable ht=new Hashtable(); file创建一个Hashtable实例
      ht.Add(E,e);添加keyvalue键值对
      ht.Add(A,a);
      ht.Add(C,c);
      ht.Add(B,b);

      string s=(string)ht[A];
      if(ht.Contains(E)) file判断哈希表是否包含特定键,其返回值为true或false
        Console.WriteLine(the E keyexist);
      ht.Remove(C);移除一个keyvalue键值对
      Console.WriteLine(ht[A]);此处输出a
      ht.Clear();移除所有元素
      Console.WriteLine(ht[A]); file此处将不会有任何输出
      }
    }

    三,遍历哈希表

     遍历哈希表需要用到DictionaryEntry Object,代码如下:
     for(DictionaryEntry de in ht) fileht为一个Hashtable实例
     {
       Console.WriteLine(de.Key);de.Key对应于keyvalue键值对key
       Console.WriteLine(de.Value);de.Key对应于keyvalue键值对value
     }

    四,对哈希表进行排序

      对哈希表进行排序在这里的定义是对keyvalue键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:
     ArrayList akeys=new ArrayList(ht.Keys); file别忘了导入System.Collections
     akeys.Sort(); file按字母顺序进行排序
     for(string skey in akeys)
     {
       Console.Write(skey + );
       Console.WriteLine(ht[skey]);排序后输出
     }


    展开全文
  • Redis底层详解(一) 哈希表和字典

    万次阅读 多人点赞 2018-06-28 17:27:37
    一文读懂哈希表
  • 数据结构 Hash表(哈希表

    万次阅读 多人点赞 2018-05-20 01:23:34
    要想知道什么是哈希表,那得先了解哈希函数 哈希函数 对比之前博客讨论的二叉排序树 二叉平衡树 红黑树 B B+树,它们的查找都是先从根节点进行查找,从节点取出数据或索引与查找值进行比较。那么,有没有一种...
  • 哈希表用法

    2015-03-18 13:07:35
    哈希表方法总结,内有如何使用哈希表的各种方法
  • 来吧!一文彻底搞定哈希表

    万次阅读 多人点赞 2019-12-02 10:21:13
    ,足以说明它是个使用非常频繁的玩意儿,而且像你说的HashMap和HashTable之类的与哈希这个词肯定是有关系的,那哈希是个啥玩意啊,这个咱们还是得先来搞明白啥是个哈希表。???? 我们看看百科解释吧: 散列表(Hash ...
  • 哈希表

    千次阅读 2019-11-06 09:33:27
    初入数据结构的哈希表(Hash Table) 这次我们来总结一下关于哈希表的知识,首先我们要了解什么是哈希表,哈希函数的构造思路有哪些?怎么解决哈希冲突?最后再去分析一下哈希查找算法。 哈希表的概念 前提小知识 ...
  •     最近在刷题以及做编程练习的作业时经常会用到哈希表,碰到一些想用的函数...本篇哈希表的作用如何使用STL库中的哈希表STL中哈希表的常用函数 哈希表的作用 如何使用STL库中的哈希表 STL中哈希表的常用函数 ...
  • 哈希表(散列表)原理详解

    万次阅读 多人点赞 2018-07-03 19:40:58
    什么是哈希表哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数...
  • 哈希 哈希表

    2021-03-12 18:42:56
    哈希表 哈希化:通常我们会将大数字转化为数组范围内下表的过程,我们就称之为哈希话 哈希函数:单词转化为大的数子,大数组再转为哈希化的代码放到一个函数中 哈希表:最终将数据插入到这个数组中,对整个结构的...
  • libevent哈希表

    2013-09-23 09:17:15
    libevent的哈希表使用方法,将原来libevent里的部分程序摘出来,方便理解。
  • 而本节所介绍的哈希表可以通过关键字直接找到数据的存储位置,不需要进行任何的比较,其查找的效率相较于前面所介绍的查找算法是更高的。 哈希表的构建 在初中的数学课本中学习过函数的相关知识,给定一个 x,通过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 214,099
精华内容 85,639
关键字:

哈希表的用法