首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用地图名称和打印map<int.class>在c++中定义地图迭代器

如何使用地图名称和打印map<int.class>在c++中定义地图迭代器
EN

Stack Overflow用户
提问于 2017-02-01 12:46:16
回答 2查看 685关注 0票数 1

首先,我可以为下面的类声明一个map迭代器吗

代码语言:javascript
复制
class obj {
public:
    map<int,double> m1;
};

map<int,obj> m;

作为m::iterator it = m.begin();,还是应该声明为map<int,obj>::iterator it = m.begin();

其次,我想打印地图m。如果上面给定的映射的值数据类型为class,并且该类包含另一个映射,我该如何打印该映射?

EN

回答 2

Stack Overflow用户

发布于 2017-02-01 13:00:09

您可以随时使用这个名为auto的方便的小功能。它可以用来代替某些上下文中的类型,比如在声明变量时。

在您的代码中,它将如下所示:

代码语言:javascript
复制
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();

如果您确实想写下m这个::iterator成员,您可以使用decltype

代码语言:javascript
复制
// Here! The compiler will replace the `decltype(m)` placeholder by `map<int,obj>`
decltype(m)::iterator it = m.begin();

至于问题的第二部分,简单的两个range for循环就可以完成这项工作:

代码语言:javascript
复制
for (auto&& [key1, value1] : m) {
    std::cout << key1;

    for (auto&& [key2, value2] : value1.m1) {
        std::cout << key2 << value2;
    }
}

上面的代码将在一行中输出地图的所有数据,不带空格。

上面的代码使用auto&&。它非常类似于auto,但它会将类型推导为引用。

票数 3
EN

Stack Overflow用户

发布于 2017-02-01 13:05:31

迭代器可以声明为- std::map<int, obj>iterator it = m.begin()

要打印它们-

代码语言:javascript
复制
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;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41972076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档