Hash_Map

1. Hash乃是对键值的hash,不涉及value。提升的是查找key的效率。

  将value存为地址,如此便能使用哈希存储更丰富的信息。

  和map相比,查找速度提升了不少,但是程序的复杂度也提升了一些。

#include <iostream>
#include <map>
#include <hash_map>

// 对该结构体按照xxx排序,在hash_map中存储name和地址
struct Site
{
    Site(const std::string &n, const std::string &i) : name(n), info(i){}
    std::string name;
    std::string info;
    ~Site(){}
};

// 定义哈希函数。这是散列过程中用到的仿函数。
struct hash_site
{
    size_t operator()(const std::string &str)const
    {
        return __gnu_cxx::__stl_hash_string(str.c_str());
    }
};

// 定义定址函数, 查找时需要用到的仿函数。
struct equal_index
{
    //bool operator()(const std::string &name, const Site * &site) const
    bool operator()(const std::string &name1, const std::string &name2) const
    {
        return name1 == name2;
    }
};

int main()
{
    // get Site addr by name.   TBD : get name by Site addr 这个例子不够好,应该将自定义结构体放前面。
    __gnu_cxx::hash_map<std::string, Site*, hash_site, equal_index> Sites;

    Site s1("s1", "100");

    Sites[std::string("aaa")] = &s1;
    std::cout << Sites[std::string("aaa")]->info << std::endl;

    return 0;
}

 

posted @ 2020-05-07 22:16  AlexOne  阅读(180)  评论(0)    收藏  举报