using namespace std;
typedef map<string, map<string, map<string, int> > > MY_MAP3;
以上代码是我为家庭作业写作的程序的片段。我基本上想要访问最里面的地图,我需要使用迭代器。
下面的代码是我用来访问最里面的地图的代码,但是当我编译我的程序时,它会抛出一堆&#34;没有可行的转换&#34;错误。
MY_MAP3::iterator ptr = data2.find(sentence[0]);
map<string, map<string, int> >::iterator ptr2 = ptr->second;
map<string, int>::iterator ptr3 = ptr2->second;
如何在这个三重嵌套地图中访问最里面的地图?感谢。
进一步澄清,行
data2.find(sentence[0])
用于返回最外层字符串的迭代器。句子是一个向量,我正在搜索最前面的单词。
答案 0 :(得分:0)
让我们从更简单的地图开始:
std::map<std::string, int>
此地图的迭代器的first
为std::string
,second
为int
。不能比那更简单。
所有地图的工作方式完全相同。因此,当您的地图是
时map<string, map<string, map<string, int> > >
这意味着此地图的迭代器将引用first
的{{1}}和string
的{{1}}。因为这就是你地图中的内容。
second
没有。您现在应该了解,map<string, map<string, int> >
是map<string, map<string, int> >::iterator ptr2 = ptr->second;
。它不是任何类型的迭代器。这只能是:
second
此时如果你想继续深入到第二级地图,你需要先map<string, map<string, int> >
一些东西。
哦,在尝试对它做任何事情之前,检查你的map<string, map<string, int> > &map2 = ptr->second;
是否返回find()
迭代器值也不会有什么坏处。