首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法欺骗std::转换成迭代器本身的操作?

有没有办法欺骗std::转换成迭代器本身的操作?
EN

Stack Overflow用户
提问于 2022-01-27 09:58:11
回答 1查看 327关注 0票数 0

所以我编写了这段代码,它不会编译。我认为原因在于,当给定这样的迭代器范围时,std::transform将对迭代器所指向的类型进行操作,而不是迭代器本身。是否有任何简单的包装器、标准库工具等来使此代码工作--即将原始映射的所有迭代器存储到一个新的向量中,并且所需的更改最少?谢谢!

代码语言:javascript
复制
#include <map>
#include <iostream>
#include <vector>

using MT = std::multimap<char, int>;
using MTI = MT::iterator;

int main()
{
    MT m;
    m.emplace('a', 1); m.emplace('a', 2); m.emplace('a', 3);
    m.emplace('b', 101);
        
    std::vector<MTI> itrs;
    std::transform(m.begin(), m.end(), std::back_inserter(itrs), [](MTI itr){
        return itr;
    });
}

编辑1:用gcc11和clang13编译失败,C++17/20

编辑2:这个问题的目的主要是出于好奇。我想看看有什么好的方法来操作现有的标准算法,使其在我想要的水平上工作。示例代码和问题完全由演示组成,但它们与任何需要解决的实际问题无关。

EN

回答 1

Stack Overflow用户

发布于 2022-01-27 10:07:03

传递给std::transform的函数和一般的算法应该使用元素,而不是迭代器。您可以使用键在映射中找到迭代器,尽管这既不高效也不简单。相反,使用普通循环:

代码语言:javascript
复制
for (auto it = m.begin(); it != m.end(); ++it) itrs.push_back(it);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70876567

复制
相关文章

相似问题

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