boost::range如何使用输入管道向map中插入元素

3

我希望使用boost:range工具来转换一个向量,并将原始元素作为键,转换后的元素作为值放入std::map中。我想到了下面的方法。但显然,我不知道在最后一步中如何实际插入元素。你能帮我一下吗?

#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <boost/range/adaptors.hpp>
#include <boost/range/algorithm/copy.hpp>

const std::vector<int> vec = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

void doSomething(int i)
{
    // Do Something
}

/** Map integers to the alphabet: 0->a, 1->b, ... */
std::string alphabetize(int i) 
{
    return std::string(1, 'a' + i);
}

int main() 
{
     std::map<std::string, int > myMap; 
     boost::copy(vec | boost::adaptors::transformed(alphabetize), std::inserter(myMap, myMap.end()));
}

为了进一步拓展,如何使用for_each函数来调用所有元素的函数,类似于这样:
 boost::range::for_each(myMap | boost::adaptors::map_value, doSomething);   
1个回答

3

只需创建一个返回键-值对而不是字符串的函数。

std::pair<std::string, int> alphabetize(int i) 
{
    return std::make_pair(std::string(1, 'a' + i), i);
}

只需返回 { std::string(1, 'a' + i), i }; 即可。 - TemplateRex
@TemplateRex 嗯,是的。但代码中没有C++11,所以我修改了函数而不使用C++11。 - ForEveR
太棒了,我没想到。我只是试图编写一个范围算法。 - polapts
要进一步扩展它,我如何使用 for_each 调用一个函数来处理所有元素? - polapts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接