Я не уверен, почему вы не можете использовать ключ double () и значение, когда ваше требование вывода равно
map<double, double>.
Поскольку я понимаю проблему, приведенный ниже код должен ее решить.
template <typename Iterator>
struct keys_and_values : qi::grammar<Iterator, std::map<double, double>() >
{
keys_and_values()
: keys_and_values::base_type(query)
{
query = pair >> *(qi::lit(',') >> pair);
pair = key >> -(',' >> value); // a pair is also separated by comma i guess
key = qi::double_;
value = qi::double_; // note the '+' is not required here
}
qi::rule<Iterator, std::map<double, double>()> query;
qi::rule<Iterator, std::pair<double, double>()> pair;
qi::rule<Iterator, double()> key, value; // 'string()' changed to 'double()'
};
Приведенный выше код анализирует ввод двойной последовательности 1323.323,32323.232,3232.23,32222.23 в
map [1323.323] = 32323.232
map [3232.23] = 32222.23