Я хочу использовать boost: range utilities для преобразования вектора и поместить исходные элементы в виде ключей и преобразованных элементов в качестве значений в std :: map. Я придумал что-то вроде ниже. Как видно, мне не хватает способа вставить элементы на последнем шаге. Не могли бы вы мне помочь?boost :: range как вставлять элементы в карту с входным каналом
#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, 'а' + я), я};' также работает – TemplateRex
@TemplateRex Ну, вы. Но в коде нет C++ 11, поэтому я изменяю функцию без C++ 11. – ForEveR
Блестящий, мне не приходило в голову. Я просто пытался отложить алгоритм диапазона – polapts