我对C++比较陌生。在Java中,我很容易实例化并使用hashmap。我想知道如何在C++中以简单的方式来完成它,因为我看到了很多不同的实现,而且它们都不那么简单。C++中简单的hashmap实现
30
A
回答
26
大多数编译器应该为你定义std::hash_map
;在即将到来的C++0x
标准中,它将作为std::unordered_map
的标准库的一部分。其上的STL Page是相当标准的。如果您使用Visual Studio,Microsoft上有一个页面。
如果你想使用你的类作为值,而不是作为键,那么你不需要做任何特殊的事情。所有原始类型(例如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;
一切都应该工作之后,随着预期。
3
尝试助推的unordered类。
7
16
在C++中使用hashmaps很简单!这就像使用标准的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;
}
2
退房Simple Hash Map (Hash Table) Implementation in C++与泛型类型键值对和分离链战略的一个基本的哈希表。
相关问题
- 1. 在C++中实现简单的getopt
- 2. HashMap实现中的分段错误C++
- 3. 如何实现简单的C++函数
- 4. 简单快捷的实现在C#
- 5. HashMap的实现:--- hashcode
- 6. Simpleton的简单实现
- 7. 简单的OpenID实现
- 8. 简单的OpenGL实现
- 9. 实现最简单的DHT
- 10. Keras简单的RNN实现
- 11. 实现简单的shell
- 12. 实现一个HashMap
- 13. 在C中实现一个简单的python函数很简单吗?
- 14. 在QT(C++)中实现一个简单的鼓机的技巧
- 15. laravel 5中简单的websocket实现
- 16. 在AS3中最简单的onReleaseOutside实现?
- 17. 关于Java HashMap的实现
- 18. 多个HashMap的实现
- 19. 如何在C#中实现一个简单的通用比较#
- 20. 简单堆栈实现
- 21. 最简单的方法来实现一个极端简单的服务器? (C#)
- 22. 在python中简单实现会话?
- 23. 在C++中使用UDP简单选择实现
- 24. HashMap来实现邻接表
- 25. 实现JavaScript ASP.NET C#的简单场景,提问的问题
- 26. 在Java Hashmap中实现remove方法?
- 27. 如何在GWT中实现HashMap?
- 28. C++不同的单实现
- 29. 简单的状态消息实现
- 30. 实现一个简单的线程池
我忘了告诉我正在使用Unix。你编码的例子看起来很简单,我会试试看。但是我应该创建自己的HashValue()方法,对吧?因为Java有一个默认的Object类的hashcode()方法,所以我不知道它在C++中是如何工作的。 – 2008-11-05 19:53:29