как использовать stl :: map в качестве двухмерного массива - PullRequest
4 голосов
/ 03 августа 2010

Не могли бы вы дать нам знать, как использовать stl: map в качестве двухмерного массива? Я хотел получить доступ к отдельным элементам, как mymap [i] [j], где я заранее не знаю, каким может быть значение i или j. Есть лучшие идеи, чтобы сделать то же самое другим способом?

Ответы [ 3 ]

22 голосов
/ 03 августа 2010

Вы можете сделать

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]".

9 голосов
/ 03 августа 2010

Альтернативное решение Эндрю Штейна, которое лучше подходит для остальных 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 для поиска одного значения.

0 голосов
/ 03 августа 2010

Попробуйте вместо этого использовать kd-дерево. Каждый уровень ветвления будет сравнивать значения i a j по очереди. Смотри http://en.wikipedia.org/wiki/Kd-tree.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...