Мне нужен класс, который будет работать как 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<String, List<int>> dict = new Dictionary<String, List<int>>();
Стоит отметить, что словарь не имеет предопределенный порядок, в то время как станд :: Карта делает. Если порядок важен, вы можете использовать SortedDictionary вместо этого, который почти идентичен в использовании, но сортируется по ключу. Все зависит от того, планируете ли вы итерацию по словарю.
Обратите внимание, что если вы используете класс, который вы создали в качестве ключа, вам необходимо будет правильно переопределить GetHashCode и Equals.
Да, декларация, которую вы написали в вопросе, верна. Он отображает строку на вектор int. Однако std :: map поддерживается реализацией дерева Red-Black, и ваш вопрос предполагает, что вы хотите хэш-таблицу. Если вы можете использовать boost, вы можете попробовать выполнить unordered_map. Это часть спецификации tr1 и реализует карту как хеш-таблицу. Хеш-функции для стандартных типов уже реализованы в boost, поэтому вам не нужно беспокоиться об этом.
#include <boost/unordered_map.hpp>
...
boost::unordered_map<std::string, std::vector<int> > my_map;
Я считаю, что вопрос запрашивает эквивалент C#, а не точный код C++ – Kazar
Я не видел тег C# в вопросе. Возможно, вы поняли, что после C# эквивалента std :: map! –
Я не задавал вопрос, но я отредактировал вопрос, чтобы уточнить (предполагая, что мое предположение о правильном вопросе). – Kazar
Это зависит от того, что вам действительно нужно. Как уже было сказано выше вы получите поведение, используя поисковую 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, в то время как станд :: map использует Red-Black-Tree, поэтому std :: map упорядочен, а словарь неупорядочен. Если вам нужен упорядоченный словарь (который будет более тесно связан с std :: map, вы можете использовать System.Collections.Generic.SortedDictionary<Key, Value>
.Использование в основном идентично тому, что словаря
Если ваша цель - заменить карту, тогда вы хотите «SortedDictionary», , потому что это также реализует красно-черное дерево. Если вы хотите Hash Table, то словарь будет работать.
- 1. Есть ли общий MultiplyByInt?
- 2. Есть ли общий Task.WaitAll?
- 3. Есть ли ролик, который может обновить любое устройство Android?
- 4. Как я могу сделать этот общий ролик java?
- 5. Есть ли общий формат даты?
- 6. Есть ли общий репортер Хадсона?
- 7. Есть ли общий метод Form.ShowDialog?
- 8. Являются ли объекты Hashtable полезными?
- 9. Можно ли отсортировать HashTable?
- 10. haskell hashtable в hashtable?
- 11. Ролик наведите на изображение
- 12. Указанный ролик недействителен
- 13. Есть ли хороший способ получить логическое значение из Hashtable?
- 14. Нужна ли нам Hashtable, так как у нас есть ConcurrentHashMap?
- 15. Есть ли общий window.onevent в javascript?
- 16. Есть ли общий способ сохранения пользовательского макета?
- 17. Есть ли общий способ синхронизации асинхронного метода?
- 18. Есть ли общий шаблон для решения комбинации?
- 19. Есть ли общий спецификатор преобразования для printf?
- 20. Есть ли общий диалог Windows Video Codec?
- 21. Есть ли общий пул объектов для .NET?
- 22. Есть ли общий способ memoize в Scala?
- 23. Есть ли общий контейнер данных для Android?
- 24. Есть ли общий числовой тип в C#?
- 25. Есть ли общий заказ на объекты JavaScript?
- 26. Есть ли общий способ обмена в рамках?
- 27. Есть ли общий способ проверить наличие GIL?
- 28. Есть ли общий инвертор функции table()?
- 29. Есть ли общий веб-интерфейс для Lucene?
- 30. Есть ли общий способ закрыть тег HTML?
Вам нужно, чтобы на каком языке? –
@ gf- Я считаю, что он стрелял по C# – TStamper
Я считаю, вы имеете в виду std: : multimap –
KitsuneYMG