Не могли бы вы сообщить нам, как использовать stl: map в качестве массива измерений? Я хотел получить доступ к отдельным элементам, как mymap [i] [j], где я не знаю заранее, что такое значение i или j. Любые лучшие идеи сделать то же самое по-другому?Как использовать stl :: map как двухмерную матрицу
ответ
Вы можете сделать
std::map<int, std::map<int, int> > mymap;
Например:
#include <map>
#include <iostream>
int main()
{
std::map<int, std::map<int, int> > mymap;
mymap[9][2] = 7;
std::cout << mymap[9][2] << std::endl;
if (mymap.find(9) != mymap.end() && mymap[9].find(2) != mymap[9].end()) {
std::cout << "My map contains a value for [9][2]" << std::endl;
} else {
std::cout << "My map does not contain a value for [9][2]" << std::endl;
}
return 0;
}
печатает 7 на стандартный вывод, а затем "Моя карта содержит значение [9] [2]".
Не могли бы вы дать мне знать, как вставить элемент на эту карту? Не могли бы вы привести пример. В моем случае мне нужно будет хранить указатели объектов на карте. Спасибо. – user243655
Спасибо за ваш ответ. Теперь, как проверить, есть ли элемент в индексе i, j? – user243655
Обновлен мой ответ, чтобы показать, как вставлять и извлекать элемент int из карты. –
Вместо этого используйте вместо этого kd-дерево. Каждый уровень ветвления будет поочередно сравнивать значения i j. См. http://en.wikipedia.org/wiki/Kd-tree.
Альтернативное решение Эндрю Штейн, который играет лучше с остальной частью STL просто использовать
typedef std::map<std::pair<int, int>, int > AMapT;
AMapT mymap;
mymap[std::make_pair(2, 4)] = 10;
...
AMapT::iterator f = mymap.find(std::make_pair(3, 5));
Например, таким образом, вам не нужно приковать два вызова map::find
для поиска одно значение.
Могу ли я использовать это для использования в качестве массива с 3 измерениями? – user243655
Стоит отметить, что 'std :: map' требует, чтобы ключ был меньше, чем сопоставим. Решение Карлоса работает, потому что 'std :: pair' предоставляет лексикографический меньше, чем компаратор. http://www.sgi.com/tech/stl/pair.html – rwong
ebtest, вы можете, но он становится уродливым: 'std :: map
- 1. заполнить двухмерную матрицу частями строки
- 2. Сравните двухмерную матрицу с JTextField
- 3. Печать двухмерную матрицу в C
- 4. Сортируйте двухмерную матрицу без касания второго измерения
- 5. Сортировать двухмерную матрицу на основе одного столбца
- 6. Python преобразование одномерного массива в двухмерную матрицу
- 7. Как вставить элемент в векторную матрицу STL?
- 8. Как использовать boost.pool для реализации карты типа stl map
- 9. stl map operator [] плохой?
- 10. Efficieny of stl :: map of stl :: sets
- 11. C++ STL map :: find()
- 12. C++ STL map, std :: пара как ключ
- 13. как сделать stl :: map key case нечувствительный
- 14. Как использовать unordered_set в STL?
- 15. STL Map Value Constructors
- 16. Как вы создаете двухмерную коллекцию?
- 17. STL std :: map динамический заказ
- 18. Как использовать SGI STL hash_map?
- 19. Как использовать STL в unix?
- 20. Как использовать slist из STL?
- 21. Как использовать binary_search на карте STL
- 22. C++ STL map typedef ошибки
- 23. Как использовать mmap для указания типа STL?
- 24. Как использовать Openlayers map
- 25. Использовать объектив как `map`
- 26. STL map - insert or update
- 27. Как использовать std :: map с boost :: phoenix?
- 28. Как использовать матрицу перспективной проекции?
- 29. Есть ли лучший способ, чем использовать Map STL C++?
- 30. Как преобразовать матрицу векторов stl в матрицу 2d-массивов (или в 1-й массив)
Есть ли причина, по которой вы используете карту? – dreamlax
Нет, нет особых причин. Не могли бы вы сообщить мне, есть ли лучший вариант? – user243655
@ebtest, знаете ли вы, каков предел значений, которые могут быть i и j? – dreamlax