我对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++简单程序实现
- 2. 在C++中实现简单的getopt
- 3. HashMap实现中的分段错误C++
- 4. 如何在c中实现计算hashmap?
- 5. 如何实现简单的C++函数
- 6. 简单快捷的实现在C#
- 7. 简单的C#ASP.NET缓存实现
- 8. HashMap中的Java 8实现
- 9. HashMap的实现:--- hashcode
- 10. 简单的OpenID实现
- 11. 简单的iCloud实现
- 12. 实现最简单的DHT
- 13. Keras简单的RNN实现
- 14. Simpleton的简单实现
- 15. 实现简单的滑块
- 16. 简单的OpenGL实现
- 17. 实现简单的shell
- 18. C++模板化HashMap实现错误
- 19. 在C中实现一个简单的python函数很简单吗?
- 20. 实现一个HashMap
- 21. HashMap实现概念
- 22. C#中有向图中检测周期的简单实现
- 23. C#中DCT,DFT的简洁实现?
- 24. 在QT(C++)中实现一个简单的鼓机的技巧
- 25. 在AS3中最简单的onReleaseOutside实现?
- 26. 在Android中实现简单的服务
- 27. laravel 5中简单的websocket实现
- 28. 关于Java HashMap的实现
- 29. 多个HashMap的实现
- 30. 实现simpleadapter使用HashMap的
我忘了告诉我正在使用Unix。你编码的例子看起来很简单,我会试试看。但是我应该创建自己的HashValue()方法,对吧?因为Java有一个默认的Object类的hashcode()方法,所以我不知道它在C++中是如何工作的。 – 2008-11-05 19:53:29