最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

理解hash和map

来源:动视网 责编:小OO 时间:2025-09-27 00:05:45
文档

理解hash和map

4.1hash_map和map的区别在哪里?∙构造函数。hash_map需要hash函数,等于函数;map只需要比较函数(小于函数).∙存储结构。hash_map采用hash表存储,map一般采用红黑树(RBTree)实现。因此其memory数据结构是不一样的。4.2什么时候需要用hash_map,什么时候需要用map?总体来说,hash_map查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级别;而map的查找速度是log(n)级别。并不一定常数就比log(n)小,hash还
推荐度:
导读4.1hash_map和map的区别在哪里?∙构造函数。hash_map需要hash函数,等于函数;map只需要比较函数(小于函数).∙存储结构。hash_map采用hash表存储,map一般采用红黑树(RBTree)实现。因此其memory数据结构是不一样的。4.2什么时候需要用hash_map,什么时候需要用map?总体来说,hash_map查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级别;而map的查找速度是log(n)级别。并不一定常数就比log(n)小,hash还
4.1 hash_map和map的区别在哪里? 

∙构造函数。hash_map需要hash函数,等于函数;map只需要比较函数(小于函数). 

∙存储结构。hash_map采用hash表存储,map一般采用红黑树(RB Tree)实现。因此其memory数据结构是不一样的。 

4.2 什么时候需要用hash_map,什么时候需要用map?

总 体来说,hash_map 查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级别;而map的查找速度是log(n)级别。并不一定常数就比log(n) 小,hash还有hash函数的耗时,明白了吧,如果你考虑效率,特别是在元素达到一定数量级时,考虑考虑hash_map。但若你对内存使用特别严格,希望程序尽可能少消耗内存,那么一定要小心,hash_map可能会让你陷入尴尬,特别是当你的hash_map对象特别多时,你就更无法控制了,而且 hash_map的构造速度较慢。 

现在知道如何选择了吗?权衡三个因素: 查找速度, 数据量, 内存使用。 

这里还有个关于hash_map和map的小故事,看看:http://dev.csdn.net/Develop/article/14/14019.shtm

4.3 如何在hash_map中加入自己定义的类型?

你只要做两件事, 定义hash函数,定义等于比较函数。下面的代码是一个例子: 

#include 

#include 

#include 

 

using namespace std;

//define the class

class ClassA{

        public:

        ClassA(int a):c_a(a){}

        int getvalue()const { return c_a;}

        void setvalue(int a){c_a=a;}

        private:

        int c_a;

};

 

//1 define the hash function

struct hash_A{

        size_t operator()(const class ClassA & A)const{

                //  return  hash(classA.getvalue());

                return A.getvalue();

        }

};

 

//2 define the equal function

struct equal_A{

        bool operator()(const class ClassA & a1, const class ClassA & a2)const{

                return  a1.getvalue() == a2.getvalue();

        }

};

 

int main()

{

        hash_map hmap;

        ClassA a1(12);

        hmap[a1]="I am 12";

        ClassA a2(198877);

        hmap[a2]="I am 198877";

       

        cout<        cout<        return 0;

}

I am 12

I am 198877

4.4如何用hash_map替换程序中已有的map容器? 

这个很容易,但需要你有良好的编程风格。建议你尽量使用typedef来定义你的类型: 

typedef map KeyMap;

当你希望使用hash_map来替换的时候,只需要修改:

typedef hash_map KeyMap;

其他的基本不变。当然,你需要注意是否有Key类型的hash函数和比较函数。 

4.5为什么hash_map不是标准的? 

具体为什么不 是标准的,我也不清楚,有个解释说在STL加入标准C++之时,hash_map系列当时还没有完全实现,以后应该会成为标准。如果谁知道更合理的解释,也希望告诉我。但我想表达的是,正是因为hash_map不是标准的,所以许多平台上安装了g++编译器,不一定有hash_map的实现。我就遇到了这样的例子。因此在使用这些非标准库的时候,一定要事先测试。另外,如果考虑到平台移植,还是少用为佳。 

4.6 有学习使用hash_map的建议吗? 

hash中文是哈希,也成为散列,听见别人说散列容器不要埋怨自己孤陋寡闻。了解hash系列,你还可以看看这篇文章:effective STL 25: 熟悉非标准散列容器, 另外建议查看源代码。如果还有问题,那么你可以在STL论坛上提问,会有高手回答你的。 

文档

理解hash和map

4.1hash_map和map的区别在哪里?∙构造函数。hash_map需要hash函数,等于函数;map只需要比较函数(小于函数).∙存储结构。hash_map采用hash表存储,map一般采用红黑树(RBTree)实现。因此其memory数据结构是不一样的。4.2什么时候需要用hash_map,什么时候需要用map?总体来说,hash_map查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级别;而map的查找速度是log(n)级别。并不一定常数就比log(n)小,hash还
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top