【问题标题】:Access a vector inside of a map that is inside another map访问另一个地图内的地图内的矢量
【发布时间】:2013-09-29 02:31:23
【问题描述】:

我有一张名为 nfa 的地图(见下文)

map<string, NFANode*> nfa;

nfa 用 NFANode 对象填充。 (见下文)

class NFANode {
public:
   string label;
   map<string,vector<NFANode*> >tr;
   bool accepting;
   bool starting;
   NFANode(string s, bool a, bool x){
       accepting = a;
       label = s;
       starting = x;
   }

};

在每个对象内部都有另一个映射调用 tr 并且在 tr 内部有一个带有信息的向量。我正在尝试访问向量以打印出向量的每个元素,但无法弄清楚如何。我一直在尝试使用没有运气的迭代器。

map<string, NFANode*>::iterator nfaIt;
for (nfaIt = nfa.begin(); nfaIt != nfa.end(); ++nfaIt){
    cout << "content of tr are: " << nfaIt->second->tr->second << endl;

}

任何帮助将不胜感激。

【问题讨论】:

  • nfaIt-&gt;second-&gt;tr 将您带到外部映射中外部节点中NFANode 的内部映射。你打算从那里做什么?倾销标签?如果曾经有一个班级为ostream 插入器覆盖而尖叫,就是这样。 (和智能指针,但一步一步)。
  • tr 是一个映射,它不是一个迭代器
  • @billz 可以打电话。我错过了。然而,关于流插入器的评论仍然存在。不错的收获。
  • 你们把我弄丢了,这是我在 C++ 中做的第一件事,我的脑袋有点晕。我真的只是想将 tr 的内容打印到控制台,以确保我插入了正确的数据。
  • @TimHorner 这是一个“嵌套”容器,对吧?您的全局映射 nfr 将字符串映射到 NFANode 指针的向量,每个指针都可以将字符串映射到 NFANode 指针的向量,每个指针......等等。假设你不填充“子”映射内的“父”指针(即您创建一个循环循环),您只希望每个映射都转储到 cout,对吗?

标签: c++ vector maps


【解决方案1】:
// iterate the outer map
map<string, NFANode*>::iterator nfaIt;
for (nfaIt = nfa.begin(); nfaIt != nfa.end(); ++nfaIt)
{
    // iterate each inner map
    map<string,vector<NFANode*> >::iterator trIt;
    for (trIt = nfaIt->second->tr.begin(); trIt != nfaIt->second->tr.end(); ++trIt)
    {
        // iterate each vector in the inner map
        vector<NFANode*>::iterator vecIt;
        for (vecIt = trIt->second.begin(); vecIt != trIt->second.end(); ++vecIt)
        {
            NFANode* pNodeInVecInMapInMap = *vecIt;
        }
    }
}

【讨论】:

  • 成功了,非常感谢。只是为了澄清,您是否使用 *vecIt 取消引用?我不认为您必须将迭代器与向量一起使用?
  • 你不必这样做,如果你愿意,你可以把它当作一个数组——我只是喜欢对称性:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
相关资源
最近更新 更多