boost :: range如何使用输入管道在地图中插入元素

时间:2017-02-15 14:18:14

标签: c++ boost stl

我想使用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 个答案:

答案 0 :(得分:3)

只需创建函数,返回对,而不是字符串。

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