В C ++ 17, как вы объявляете и инициализируете вектор пар (или кортежей) с необязательным элементом?
std::vector<std::pair<int, optional<bool> > > vec1 = { {1, true},
{2, false},
{3, nullptr}};
У меня есть пара, где второй элемент может быть нулевым / необязательным.
std::piecewise_construct
может также предоставить интересные альтернативы.reset
здесь.Ответы:
Вы ищете
std::nullopt
вместоnullptr
.источник
std::
следующим образом? Почему бы не простоusing std::vector
и друзьям, чтобы вы могли просто написатьvector<pair<int, optional<bool>>
? Читает намного более разумноvector
,pair
,optional
и т.д. , я использую в этой строке. Включение встроенного пространства имен однозначно говорит мне, откуда взялась эта функция и что она делает; линия автономна. Это особенно верно для больших проектов (так как оно полностью избегает конфликтов пространства имен), но также полезно для кратких примеров кода.std
?arg
,count
,find
,size
std::
абсолютно ненавязчиво. Было бы иначе, если бы имя пространства имен было намного длиннее.Или просто используйте конструкцию по умолчанию:
источник
std::nullopt
лучше сообщает намерение.