-3

我最初的问题是如何将多维 int 数组映射到字符串。以下是解决方案:感谢 Ikspeto

    map<int , map<int,string>> _myvar;
    _myvar[0][0] = "Some String00";
    _myvar[0][1] = "Some String01";
    _myvar[0][2] = "Some String02";
    _myvar[1][0] = "Some String10";

现在我的问题是如何在这个上实现 map 的 find 或 count 方法?

4

2 回答 2

1

我不太了解你的问题,但我认为这就是你要找的:

#include <string>
#include <iostream>
#include <map>


using namespace std;

int main()
{
   map<int, map<int, string> > m; 

   m[0][0] = "one";
   m[1][3] = "two";
   cout<<m[0][0]<<endl;
   cout<<m[1][3]<<endl;
}

请注意,您必须在 string> 之后留一个空格。

或者

如果要将每个字符转换为 int :

#include <string>
#include <iostream>


using namespace std;

int main()
{
   string s;
   s = "one";

   int arr[2][10];

   int a = s.size();
   for(int i=0;i<a;i++)
   {
       arr[0][i] = s[i];
   }

   cout<<arr[0][0]<<" "<<(char)arr[0][1]<<endl;
}

编辑

发布您的完整源代码。我的示例在我的本地编译器上工作。在您提供的代码示例中,您声明了一个名为 _menu_item 的变量,但您使用的是 _myvar。您可能在完整代码的某处以不同方式声明了 _myvar。

要通过第一个值查找地图条目,您可以使用 find()。Find 返回一个迭代器。

#include <string>
#include <iostream>
#include <map>


using namespace std;

int main()
{
    map<int , map<int,string> > _myvar, my;
    _myvar[0][0] = "Some String00";
    _myvar[0][1] = "Some String01";
    _myvar[0][2] = "Some String02";
    _myvar[1][0] = "Some String10";

    map<int , map<int,string> >::iterator it; /* This is an iterator for this kind of map.
    You can use it to assign a position to it from the map. */



    it = _myvar.find(0); //Like this
    _myvar.erase (it); // And use it for example like this


    _myvar[3] = _myvar.find(0)->second ; // The pointer ->second gives the second value of the map. In this case an another map.

}

要按值搜索,您可以使用:

for (it = _myvar.begin(); it != _myvar.end(); ++it)
{
    if (it->second == value)
    {
        key = it->first;
        break;
    }
}
于 2012-06-18T09:23:55.830 回答
1

如果要将字符串直接存储在二维数组中,可以使用:

std::string _myvar[10][20]

如果你想要一个指向 C 字符串的 (const) 指针数组,那么:

char* _myvar[10][20];
// or
const char* _myvar[10][20];

如果您想要一个动态大小的数组,请使用vector<vector<string>>(或boost::multi_array 也许)

于 2012-06-18T09:24:55.317 回答