【问题标题】:Char 2D array in map in C++C ++中地图中的Char 2D数组
【发布时间】:2011-09-06 22:21:55
【问题描述】:

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

我做错了什么?

编辑:

我刚刚找到了另一种方法。这样我就可以实现我在问题中所说的。我不使用二维数组,而是将其转换为字符串并使用它。它仍然会产生相同的结果:

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

【问题讨论】:

  • 进一步阅读 Oli 的回答;他所说的大部分内容与 STL 在map (en.wikipedia.org/wiki/Map_(C%2B%2B)) 中使用的底层容器有关。它通常是一棵红黑树。
  • 请不要将答案写成问题。

标签: c++ arrays stl map


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你必须使用一个包装类,它需要支持operator&lt;。如果字典顺序没问题,你可以这样做:

    #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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 2016-12-08
      • 2013-07-12
      • 1970-01-01
      相关资源
      最近更新 更多