Предположим, вы хотите попросить пользователей выбрать некоторое число (0). Один из действительных ответов — не выбирать ничего, что представлено неинициализированным<optional<int>>. Вы хотите сделать гистограмму, показывающую, сколько раз был сделан каждый выбор. Вы можете использовать<std::map>:
std::map<boost::optional<int>, int> choices;
for (int i = 0; i < LIMIT; ++i) {
boost::optional<int> choice = readChoice();
++choices[choice];
}
Это работает, потому что<optional<T>><LessThanComparable>, когда<T><LessThanComparable>. В этом случае состояние неинициализации рассматривается как еще одно значение<T>, которое сравнивается меньше, чем любое значение<T>.