如何使用std :: variant打印地图键/值?

用户名

我正在尝试在字典中打印某个值的键。我这样定义地图:

std::map<std::string, std::variant<float,int,bool,std::string>> kwargs; 
kwargs["interface"] = "probe"; 
kwargs["flag"] = true; 
kwargs["Height"] = 5; 
kwargs["length"] = 6; 

我试图正常打印该值,但是发生(没有运算符“ <<”与这些操作数匹配)错误。

std::cout << kwargs["flag"] << std::endl; 

有人可以帮我解决这个错误吗?

老刺猬

我将使用将std::visit任何类型打印为的通用lambda,std::cout如下所示:

std::map<std::string, std::variant<float,int,bool,std::string>> kwargs; 
kwargs["interface"] = "probe"s;
kwargs["flag"] = true; 
kwargs["Height"] = 5; 
kwargs["length"] = 6; 

for (const auto& [k, v] : kwargs){
    std::cout << k << " : ";
    std::visit([](const auto& x){ std::cout << x; }, v);
    std::cout << '\n';
}

这工作,因为所有的floatintbool,以及std::string对输出流运算符重载<<对于其他类型,或者要覆盖此行为,可以使用自定义仿函数类而不是lambda:

struct PrintVisitor {
    template<typename T>
    void operator()(const T& t) const {
        std::cout << t;
    }

    // prints std::string in quotes
    void operator(const std::string& s) const {
        std::cout << '\"' << s << '\"';
    }
};

[...]

std::visit(PrintVisitor{}, kwargs);

注意:不幸的是,该行kwargs["interface"] = "probe";实际上并未选择std::string变量类型构造函数,因为字符串文字优先转换为abool而不是a std::string进一步阅读)。您可以通过std::string例如使用std::string{"probe"}或标准的std::string用户定义文字来明确避免这种情况"probe"s

现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用 lodash 从地图中删除键值对

来自分类Dev

角度-如何打印键值的值

来自分类Dev

如何打印地图索引?

来自分类Dev

如何使用std :: visit将std :: variant的值转换为std :: string

来自分类Dev

如何从Scala中的地图中删除键值

来自分类Dev

如何从Scala中的地图中删除键值

来自分类Dev

打印地图及如何使用foreach流API的

来自分类Dev

如何使用 scala 打印地图值列表

来自分类Dev

如何使用地图打印列表元素?

来自分类Dev

如何使用Spark的地图转换在Scala中返回多个键值对?

来自分类Dev

如何多态地使用替代类型的std :: variant

来自分类Dev

如何使用可变参数模板将std :: variant与std :: visit一起进行?

来自分类Dev

如何打印JSON文件的路径和键值

来自分类Dev

jq +如何只打印属性下的键值

来自分类Dev

如何不使用std lib函数打印内容?

来自分类Dev

如何为std :: variant赋值?

来自分类Dev

如何将地图键值收集到列表中

来自分类Dev

如何从Terraform的地图中删除与键值匹配的值

来自分类Dev

Terraform:如何迭代通过json文件输入的地图的键值对

来自分类Dev

如何按降序对地图条目的键值进行排序?

来自分类Dev

如何打印我在地图中使用的数组?

来自分类Dev

如何打印GMap.NET地图?

来自分类Dev

打印此地图时如何节省墨水?

来自分类Dev

如何打印GMap.NET地图?

来自分类Dev

如何打印特定范围的ArcGis地图?

来自分类Dev

使用boost :: variant库制作地图。如何以正确的类型存储和显示事物?

来自分类Dev

使用boost :: variant库制作地图。如何以正确的类型存储和显示事物?

来自分类Dev

如何使用初始化列表初始化std :: variant?

来自分类Dev

如何使用以下模板为地图声明迭代器 - std::map<std::string, T> my_map?

Related 相关文章

  1. 1

    如何使用 lodash 从地图中删除键值对

  2. 2

    角度-如何打印键值的值

  3. 3

    如何打印地图索引?

  4. 4

    如何使用std :: visit将std :: variant的值转换为std :: string

  5. 5

    如何从Scala中的地图中删除键值

  6. 6

    如何从Scala中的地图中删除键值

  7. 7

    打印地图及如何使用foreach流API的

  8. 8

    如何使用 scala 打印地图值列表

  9. 9

    如何使用地图打印列表元素?

  10. 10

    如何使用Spark的地图转换在Scala中返回多个键值对?

  11. 11

    如何多态地使用替代类型的std :: variant

  12. 12

    如何使用可变参数模板将std :: variant与std :: visit一起进行?

  13. 13

    如何打印JSON文件的路径和键值

  14. 14

    jq +如何只打印属性下的键值

  15. 15

    如何不使用std lib函数打印内容?

  16. 16

    如何为std :: variant赋值?

  17. 17

    如何将地图键值收集到列表中

  18. 18

    如何从Terraform的地图中删除与键值匹配的值

  19. 19

    Terraform:如何迭代通过json文件输入的地图的键值对

  20. 20

    如何按降序对地图条目的键值进行排序?

  21. 21

    如何打印我在地图中使用的数组?

  22. 22

    如何打印GMap.NET地图?

  23. 23

    打印此地图时如何节省墨水?

  24. 24

    如何打印GMap.NET地图?

  25. 25

    如何打印特定范围的ArcGis地图?

  26. 26

    使用boost :: variant库制作地图。如何以正确的类型存储和显示事物?

  27. 27

    使用boost :: variant库制作地图。如何以正确的类型存储和显示事物?

  28. 28

    如何使用初始化列表初始化std :: variant?

  29. 29

    如何使用以下模板为地图声明迭代器 - std::map<std::string, T> my_map?

热门标签

归档