首先,我可以为以下类声明一个map迭代器
class obj {
public:
map<int,double> m1;
};
map<int,obj> m;
为m::iterator it = m.begin();
或我应将其声明为map<int,obj>::iterator it = m.begin();
其次,我想打印地图m
。
如何打印上面给定的地图,其值数据类型为类,该类包含另一个地图?
答案 0 :(得分:1)
您可以随时使用这个名为auto
的便捷小功能。它可以在某些上下文中用于代替类型,例如在声明变量时。
在您的代码中,它看起来像这样:
struct obj {
map<int,double> m1;
};
map<int,obj> m;
// Here! The compiler will replace the `auto` placeholder by `map<int,obj>::iterator`
auto it = m.begin();
如果您真的想在::iterator
m
decltype
成员中写下来,可以使用// Here! The compiler will replace the `decltype(m)` placeholder by `map<int,obj>`
decltype(m)::iterator it = m.begin();
:
for (auto&& i1 : m) {
std::cout << i1.first;
for (auto&& i2 : i1.second.m1) {
std::cout << i2.first << i2.second;
}
}
至于问题的第二部分,只需要两个范围for循环即可完成工作:
auto&&
上面的代码将在一行中输出地图的所有数据,不带空格。
上面的代码使用auto
。它与for
非常相似,但它会将类型推断为引用。
答案 1 :(得分:1)
迭代器可以声明为 -
std::map<int, obj>iterator it = m.begin()
要打印它们 -
for (std::map<int, obj>::iterator it = m.begin(); it != m.end(); ++it) {
std::cout << it->first;
for (std::map<int, double>::iterator it1 = it->second.m1.begin(); it1 != it->second.m1.end(); ++it1) {
std::cout << it1->first << it1->second;
}
}