Усилить свойство c ++ — если ключ не существует, установить в false

Я новичок в разборе JSON с Boost, используя дерево свойств.

Если у меня есть этот хэш:

foo = {'test1',true}

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

Мне нужно проверить, существует ли ключ, и если нет, установить его на false.

Как мне это сделать изящно?

Спасибо

3

Решение

От повышения документация вы можете попытаться найти ключ, и если not_found() тогда вы можете нажать новый ключ.

assoc_iterator not_found (); Возвращает не найденный итератор.
Эквивалентен end () в реальном ассоциативном контейнере.

const_assoc_iterator not_found () const; Возвращает не найденный
итератор. Эквивалентен end () в реальном ассоциативном контейнере.

поиск_связчика (тип ключа const & ключ); Найти ребенка с
данный ключ или not_found (), если его нет. Нет гарантии
о том, какой ребенок возвращается, если у нескольких есть один и тот же ключ.

const_assoc_iterator find (const key_type & ключ) const; Найти ребенка
с данным ключом, или not_found (), если его нет. Здесь нет
гарантия того, какой ребенок возвращается, если у нескольких есть один и тот же ключ.

2

Другие решения

  // 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);
6

По вопросам рекламы [email protected]