3

我是使用属性树进行 json 解析的新手。

如果我有这个哈希:

foo = {'test1',true}

ptree pt;
bool v = pt.get<bool>("test2");

我需要检查一个密钥是否存在,如果没有将其设置为 false。

我该如何优雅地做到这一点?

谢谢

4

2 回答 2

6
  // bool optional
  boost::optional<bool> v = pt.get_optional<bool>("test2");

  // any type actually
  boost::optional<std::string> v2 = pt.get_optional<std::string>("test3");

  if (v) // key exists
    bool bool_value = v.get();
  else // not exists
    v.set(false);
于 2013-02-22T09:19:25.690 回答
2

从 boost文档中,您可以尝试找到密钥,如果not_found()那样,您可以推送一个新密钥。

assoc_iterator not_found() ; 返回未找到的迭代器。等效于真实关联容器中的 end()。

const_assoc_iterator not_found() 常量;返回未找到的迭代器。等效于真实关联容器中的 end()。

assoc_iterator find(const key_type & key) ; 查找具有给定键的孩子,如果没有,则查找 not_found()。如果多个具有相同的密钥,则无法保证返回哪个孩子。

const_assoc_iterator find(const key_type & key) const; 查找具有给定键的孩子,如果没有,则查找 not_found()。如果多个具有相同的密钥,则无法保证返回哪个孩子。

于 2013-02-22T06:46:52.193 回答