C++中简单的hashmap实现
Simple hashmap implementation in C++
我对C++还比较陌生。在Java中,实例化和使用hashmap对我来说很容易。我想知道如何在C++中以简单的方式实现它,因为我看到了许多不同的实现,但对我来说没有一个看起来很简单。
大多数编译器都应该为您定义std::hash_map
;在即将到来的C++0x
标准中,它将作为std::unordered_map
成为标准库的一部分。上面的STL页面相当标准。如果你使用Visual Studio,微软会在上面有一个页面
如果您想将类用作值,而不是键,那么您不需要做任何特殊的操作。所有基元类型(如int
、char
、bool
甚至char *
)都应该作为hash_map
中的键"工作"。然而,对于其他任何事情,您都必须定义自己的哈希和等式函数,然后编写将它们封装在类中的"函子"。
假设您的类名为MyClass
,并且您已经定义了:
size_t MyClass::HashValue() const { /* something */ }
bool MyClass::Equals(const MyClass& other) const { /* something */ }
您将需要定义两个函子来将这些方法包装在对象中。
struct MyClassHash {
size_t operator()(const MyClass& p) const {
return p.HashValue();
}
};
struct MyClassEqual {
bool operator()(const MyClass& c1, const MyClass& c2) const {
return c1.Equals(c2);
}
};
并将您的hash_map
/hash_set
实例化为:
hash_map<MyClass, DataType, MyClassHash, MyClassEqual> my_hash_map;
hash_set<MyClass, MyClassHash, MyClassEqual> my_hash_set;
在那之后一切都应该按预期进行。
在C++中使用哈希图很容易!这就像使用标准的C++映射。您可以使用unordered_map
的编译器/库实现,也可以使用boost或其他供应商提供的实现。这是一个快速样本。如果你关注你得到的链接,你会发现更多。
#include <unordered_map>
#include <string>
#include <iostream>
int main()
{
typedef std::tr1::unordered_map< std::string, int > hashmap;
hashmap numbers;
numbers["one"] = 1;
numbers["two"] = 2;
numbers["three"] = 3;
std::tr1::hash< std::string > hashfunc = numbers.hash_function();
for( hashmap::const_iterator i = numbers.begin(), e = numbers.end() ; i != e ; ++i ) {
std::cout << i->first << " -> " << i->second << " (hash = " << hashfunc( i->first ) << ")" << std::endl;
}
return 0;
}
看看boost.unorordered及其数据结构。
试试boost的无序类。
查看C++中的简单哈希映射(Hash Table)实现,了解具有泛型类型键值对和单独链接策略的基本哈希表。
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 正在寻找C++不可变的hashset/hashmap
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- DHCP指纹的HashMap实现
- tbb并发hashmap实现字典ADT
- 如何在C++中实现 HashMap 时使用 std::function
- 使用HashTable实现HashMap
- 用hashmap代替邻接矩阵实现maxflow算法
- C++中简单的hashmap实现