用C ++编写地图中的二维数组

时间:2011-09-06 22:21:56

标签: c++ arrays stl map

如何在C ++中使用带有地图的2D字符数组。我想这样做:

map<char[50][50],int>M;

char brr[50][50];
//some operation here on the array
int aa=1;

if(M.find(brr)==M.end())
{
     M[brr]=aa;
     aa+=1;
}

我做错了什么?

修改

我刚刚找到另一种方式。这样我就能实现我在问题中所说的内容。而不是使用2d数组我只是将它转换为字符串并使用它。它仍会产生相同的结果:

map<string,int>M;

char brr[50][50];
//some operation here on the array
int aa=1,i,j;

string ss="";

for(i=0;i<50;i++)
{
     for(j=0;j<50;j++)
     {
         ss+=brr[i][j];
     }
}

if(M.find(ss)==M.end())
{
     M[ss]=aa;
     aa+=1;
}

2 个答案:

答案 0 :(得分:4)

你做不到。无法将数组分配给(例如,您的示例中不能brr = XXX;),这是std::map的密钥类型的要求。此外,密钥需要在其上定义严格弱排序(即它需要operator<或比较器函数)。

您可以考虑将数组包装在类中,定义适当的operator <,然后将其用作键类型。

答案 1 :(得分:0)

您必须使用包装类,它需要支持operator<。如果词法排序很好,你可以这样做:

#include <boost/array.hpp>
#include <map>

int main()
{
    typedef boost::array<boost::array<char, 50>, 50> Array;

    std::map<Array, int> m;
}
如果您使用的是C ++ 11,则

boost::array可以替换为std::array