在C++中使用地图名和打印映射定义In类的映射迭代器
首先,我可以为下面的类声明一个映射迭代器吗在C++中使用地图名和打印映射定义In类的映射迭代器,c++,C++,首先,我可以为下面的类声明一个映射迭代器吗 class obj { public: map<int,double> m1; }; map<int,obj> m; 作为m::迭代器it=m.begin;或者我应该将其声明为map::iterator it=m.begin 其次,我想打印地图m。 如何打印上面给定的地图,该地图的值数据类型为class,而该类包含另一个地图?您始终可以使用这个名为auto的便捷小功能。它可以在某些上下文中代替类型使用,比如在声明变量
class obj {
public:
map<int,double> m1;
};
map<int,obj> m;
作为m::迭代器it=m.begin;或者我应该将其声明为map::iterator it=m.begin
其次,我想打印地图m。
如何打印上面给定的地图,该地图的值数据类型为class,而该类包含另一个地图?您始终可以使用这个名为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();
至于问题的第二部分,只需两个range for loop即可:
for (auto&& [key1, value1] : m) {
std::cout << key1;
for (auto&& [key2, value2] : value1.m1) {
std::cout << key2 << value2;
}
}
上面的代码将在一行中输出地图的所有数据,不带空格
上面的代码使用自动&&。它与auto非常相似,但它会将类型推断为引用。您可以随时使用这个名为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();
至于问题的第二部分,只需两个range for loop即可:
for (auto&& [key1, value1] : m) {
std::cout << key1;
for (auto&& [key2, value2] : value1.m1) {
std::cout << key2 << value2;
}
}
上面的代码将在一行中输出地图的所有数据,不带空格
上面的代码使用自动&&。它与auto非常相似,但它会将类型推断为引用。迭代器可以声明为- std::mapiterator 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;
}
}
迭代器可以声明为- std::mapiterator 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;
}
}
非常感谢您的回答。但我的问题是map是在一个文件中的类中定义的,我通过将类的对象传递给print函数,在另一个文件中打印它。我不能仅仅通过使用像m::iterator it=m.begin这样的映射名来声明迭代器吗;尝试使用@Guillaume建议的auto谢谢你的回答。但我的问题是map是在一个文件中的类中定义的,我通过将类的对象传递给print函数在另一个文件中打印它。我不能仅仅通过使用像m::iterator it=m.begin这样的映射名来声明迭代器吗;按照@guilloum的建议尝试使用auto