首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中,是否可以使用命名变量(例如键和值)代替.first和.second进行std::map<> "for element : container“迭代?

在C++中,是否可以使用命名变量(例如键和值)代替.first和.second进行std::map<> "for element : container“迭代?
EN

Stack Overflow用户
提问于 2016-04-07 23:46:21
回答 4查看 3.4K关注 0票数 26

我不确定要搜索什么。我找到了Renaming first and second of a map iterator,但这并不是我想做的事情。

下面是我想在下面看到的无意义的C++代码。有没有可能做到这一点?否则,我想只能选择“调整”迭代器作为循环中的第一行。

代码语言:javascript
运行
复制
// what I want to do:
std::map<int, std::string> my_map;
// ... populate my_map
for(auto key, auto & value: my_map){
    // do something with integer key and string value
}

C++11很好,但如果可能的话,最好避免使用boost。

我得到的最接近的是

代码语言:javascript
运行
复制
// TODO, can this be templated?
struct KeyVal{
    int & id;
    std::string & info;

    template <typename P>
    KeyVal(P & p)
        : id(p.first)
        , info(p.second)
    {
    }
};

//...
for ( KeyVal kv : my_map ){
    std::cout << kv.info;
}

但这意味着为每个map编写一个适配器类:(

代码语言:javascript
运行
复制
// slightly joke answer/"what could possibly go wrong?"
#define key first
#define value second
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36481173

复制
相关文章

相似问题

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