У меня есть контейнер, и я бы хотел выбрать итератор, который бы случайно использовал предикат. Если это помогает быть конкретным, контейнер представляет собой карту.Получите итератор из контейнера равномерно случайным от итераторов, которые удовлетворяют предикату
наивности, я бы сказал так:
std::count_if
, чтобы получить число элементов в диапазоне.
Выберите случайное число btwn 0
и num_elements-1
.
Создайте лямбду, чтобы создать предикат с состоянием, который подсчитывает до случайного числа и возвращает только true.
std::find_if
с лямбда.
Будет ли это работать, и есть ли лучший способ? В качестве альтернативы, я мог бы использовать count вместо count_if и регенерировать число, если он прервал предикат. Может быть полезно, если предикат в основном верен, я полагаю, но не буду работать хорошо для моих целей.
Не могли бы вы пояснить «итератор, который удовлетворяет случайному сказуемому»? Итератор над контейнером? Каковы аргументы (ы) для предиката? Что вы подразумеваете под итератором, который удовлетворяет предикату? – qxz
Я предполагаю, что у вас достаточно идеи для разработки кода. –
Отредактированное название и спасибо за редактирование вопроса. Ответ собеседника выглядит так, как я думал. –