如何在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;
}
答案 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
。