我需要一个类似C++ std :: map的类。更具体地说,我需要这样的行为:
map< string, vector<int> > my_map;
这可能吗?是否有任何通用的HashTable?
回答
字典是我相信你想要的东西:
Dictionary<String, int> dict = new Dictionary<String, int>();
dict.Add("key", 0);
Console.WriteLine(dict["key"]);
等,等
MSDN:http://msdn.microsoft.com/en-us/library/xfhwa508.aspx
您可以指定更多或更少的任何类型的键/值类型。包括另一个字典,一个数组或其他:
Dictionary<String, String[]> dict = new Dictionary<String, String[]>();
因此,这里Dictionary中的每个元素指向一个字符串数组。
要实现您所需要的(与向量INT),您将需要一个列表作为值类型:
Dictionary<String, List<int>> dict = new Dictionary<String, List<int>>();
值得一提的是一个字典没有预定义的顺序,而性病::地图确实。如果顺序很重要,您可能希望使用SortedDictionary,这在用法上几乎相同,但按键排序。如果你打算真的迭代字典,这一切都取决于。
但是请注意,如果您使用您创建的类作为键,您将需要正确覆盖GetHashCode和Equals。
是的,你在问题中写的声明是正确的。它将一个字符串映射到一个整数矢量上。然而,std :: map由红黑树实现支持,而你的问题表明你需要一个散列表。如果你可以使用boost,你可以尝试执行unordered_map。这是tr1规范的一部分,并将映射实现为散列表。标准类型的散列函数已经在boost中实现,所以你不需要担心这一点。
#include <boost/unordered_map.hpp>
...
boost::unordered_map<std::string, std::vector<int> > my_map;
这取决于你真正需要什么。 因为已经说过你使用System.Collections.Generic.Dictionary<Key, Value>
查找行为,所以相当于std::map<string, std::vector<int> >
会(使用System.Collections.Generic.List<int>
为vectorequivalent):
Dictionary<string, List<int>> myDictionary = new Dictionary<string, List<int>>();
myDictionary.Add("a", new List<int>());
等 内部字典使用Hashtable的,而性病::地图使用红黑树,所以std :: map是有序的,而Dictionary是无序的。如果你需要一个有序的字典(这将更接近std :: map,你可以使用System.Collections.Generic.SortedDictionary<Key, Value>
。它的用法大致相同,它的用法大致与字典
相同如果你的目标是要替换map,那么你想'SortedDictionary' ,因为那也实现了红黑树,如果你想要一个哈希表,那么Dictionary就可以工作了
- 1. Wolfram Mathematica中是否有HashTable结构?
- 2. 是否有任何通道反转库?
- 3. 是否有任何的JavaFX
- 4. 是否有任何针对OrientDB为GraphAPI编写的通用DAO?
- 5. 是否有任何通用版本的Array.newInstance?
- 6. 是否有任何通用CRUD客户端应用程序?
- 7. 是否有任何宝石用于存储用户通知?
- 8. 使用推送通知服务是否有任何费用?
- 9. 在普通的php(没有任何框架)上是否有任何i18n库?
- 10. 当后台任务结束时,ios是否有任何通知?
- 11. 是如何在Hashtable
- 12. 是否有任何VBScript库?
- 13. 是否有任何截断?
- 14. 是否有任何Santizing ModelBinders?
- 15. 是否有任何ePub库
- 16. 是否有任何通用初始上下文工厂?
- 17. 是否有任何理由通过PyMem_Malloc使用malloc?
- 18. 是否有任何使用PHP通信设备?
- 19. 在Java中是否有任何通用名称值对?
- 20. 通过VM使用核心服务是否有任何限制
- 21. 是否有任何理由通过fgets + sscanf使用scanf或fscanf
- 22. 通过LINQ.ToList()使用List.AddRange是否有任何好处?
- 23. 是否有任何变通使用在划线PATCH方法
- 24. 通过LocationManager使用FusedLocationProviderApi是否有任何优势?
- 25. 当有一个通用的Dictionary类时,是否有任何理由使用Hashtables?
- 26. WinRT是否有任何EventBrokers可用?
- 27. 是否有任何理由使用[:over @:?
- 28. 是否有任何Brew应用商店?
- 29. 是否有任何框架用java
- 30. 是否有任何理由使用isset()?
你需要用什么语言? – 2009-12-16 13:25:54
@gf-我相信他是为C#拍摄的 – TStamper 2009-12-16 13:27:46
我相信你的意思是std: :multimap –
KitsuneYMG
2009-12-16 13:31:30