2014-01-11 112 views
0

我的ObjClass * obj有一个map<std::string, OtherClass*> obj2,我想获得所有的密钥,因为我想迭代obj2的内容。获取地图的密钥而不知道它的

我不能先验地知道字符串包含什么,所以我尝试了这种方式,但没有奏效。

typedef std::map<std::string, ObjClass2*>::iterator it_type;  
    for(it_type iterator = obj.begin(); iterator != obj.end(); iterator++) 
    { 
     std::cout<<iterator->first<<std::endl; 

    } 

也许我可以使用更多的整数索引吗?但是如何?

+1

定义“不工作”的所有键。明确。 –

+1

为什么你需要所有的钥匙?你能显示一些代码显示这个吗?您不需要键遍历'obj2'。 – juanchopanza

回答

2

请检查下面的代码,你需要通过obj2的元素进行迭代:

typedef std::map<std::string, ObjClass2*>::iterator it_type;  
for(it_type iterator = obj->obj2.begin(); iterator != obj->obj2.end(); ++iterator) 
{ 
    std::cout<<iterator->first<<std::endl; 

} 
+0

我得到这个错误:错误:请求成员“开始”在“OBJ”,这是指针类型的“ObjClass *”(?也许你想用“ - >”) 我尝试了用“改变 - >'运算符,但我得到另一个错误,告诉我,ObjClass不是成员'开始'和'结束'。 – user2369478

+0

@ user2369478 obj-> obj2.begin()表示您需要首先访问obj的obj2成员,然后调用属于obj2的开始/结束,而不是obj – vershov

+0

哦,对不起。我想说'请求会员'在'obj2'中开始'“ – user2369478

2

如果说OBJ具有类型ObjClass *那么很明显,这种结构

it_type iterator = obj.begin(); 

是无效的。

如果你需要得到的OBJ 2,你可以写,例如下面的方式

for (const auto &p : obj->obj2) 
{ 
    std::cout << p.first << std::endl; 
} 
+0

没有匹配函数调用'begin(ObjClass *&) – user2369478

+0

@ user2369478我不知道你正在测试什么代码。我显示的代码是正确的。 –

+0

@@ user2369478也许这句话在你的问题 “我ObjClass * OBJ有一个地图<的std :: string,OtherClass *> OBJ 2”。我不明白,它是类ObjeClass,因为我猜测包含地图,而不是ObjClass * –