【问题标题】:add key value pairs in program options在程序选项中添加键值对
【发布时间】:2016-02-12 17:06:06
【问题描述】:

我需要在我的程序中加载一个映射,带有一个整数键和一个字符串值,如下所示:

1, oil
2, car
5, house

我想使用boost::program_options 加载它们。我可以在tutorial 中看到,我可以从选项中加载一个向量,其语法如下:

int opt;
po::options_description desc("Allowed options");
desc.add_options()
    ("help", "produce help message")
    ("optimization", po::value<int>(&opt)->default_value(10), "optimization level")
    ("include-path,I", po::value< vector<string> >(), "include path")
    ("input-file", po::value< vector<string> >(), "input file");

然后我可以使用program --input-file file1, --input-file file2 来创建一个带有file1file2 的向量。从程序选项中实现地图的最佳方式是什么?

例如,我可以使用一个字符串,然后拆分字符串以获得值,例如program --pair "1, oil" --pair "2, car" --pair "5, house",或者我可以使用program --key 1 --value oil --key 2 --value car --key 5 --value car 将它们分开。

我想使用可以从命令行和配置文件轻松编写的东西。哪种方法最好?

【问题讨论】:

    标签: c++ dictionary command-line boost-program-options


    【解决方案1】:

    我可以使用例如一个字符串,然后拆分字符串以获得值,例如program --pair "1, oil" --pair "2, car" --pair "5, house" ...

    我会坚持使用第一个选项并阅读 std::vector&lt;std::string&gt; 字符串向量。之后,您通过本机解析的向量,拆分字符串并填充您的地图。

    ...或者我可以使用程序将它们分开 --key 1 --value oil --key 2 --value car --key 5 --value car

    我不确定这种方式是否能保持您需要的强排序。

    【讨论】:

    • 好吧,这是我最初的想法。如果这是使用选项以传递地图的“标准”方式,那么我将使用它。谢谢。
    • @Jepessen 没有真正的标准方式,但它让您的界面对用户来说更加清晰。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    相关资源
    最近更新 更多