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; }

浙公网安备 33010602011771号