如何使用map name和print map <int.class>在c ++中定义map迭代器

时间:2017-02-01 04:46:16

标签: c++

首先,我可以为以下类声明一个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。 如何打印上面给定的地图,其值数据类型为类,该类包含另一个地图?

2 个答案:

答案 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;
    }
}