how to use stl::map as two dimension array

前端 未结 3 640
感动是毒
感动是毒 2020-12-16 07:09

Could you let us know how to use stl:map as two dimension array? I wanted to access the individual elements as like mymap[i][j] where I do not know beforehand what the value

相关标签:
3条回答
  • 2020-12-16 07:30

    You can do

    std::map<int, std::map<int, int> > mymap;
    

    For example:

    #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;
    }
    

    prints 7 on the standard output, followed by "My map contains a value for [9][2]".

    0 讨论(0)
  • 2020-12-16 07:33

    An alternative solution to Andrew Stein's which plays nicer with the rest of STL is to simply use

    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));
    

    For example, with this way you don't need to chain two calls to map::find to search for a single value.

    0 讨论(0)
  • 2020-12-16 07:53

    Consider using a kd-tree instead. Each level of branching will compare the i an j values in turn. See http://en.wikipedia.org/wiki/Kd-tree.

    0 讨论(0)
提交回复
热议问题