STD :: String with Boost Spiritから二重ペアを抽出するにはどうすればよいですか?
-
01-10-2019 - |
質問
一連の二重ペアを使用して文字列をSTD :: Boost Spiritのマップに解析したいと思います。
例を採用しましたhttp://svn.boost.org/svn/boost/trunk/libs/spirit/example/qi/key_value_sequence.cppしかし、私は適切なQi ::キーと価値のルールを拡張することに問題があります:
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;
key = qi::double_;
value = +qi::double_;
}
qi::rule<Iterator, std::map<double, double>()> query;
qi::rule<Iterator, std::pair<double, double>()> pair;
qi::rule<Iterator, std::string()> key, value;
};
キーと値のルールにはdouble()を使用できず、std :: stringをダブルから構築することはできません。
解決
出力要件があるときに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の入力を解析します。
マップ[1323.323] = 32323.232
マップ[3232.23] = 32222.23
所属していません StackOverflow