Как фильтровать вектор перед применением std::ranges::minmax_element? [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Как фильтровать вектор перед применением std::ranges::minmax_element? [дубликат]

Сообщение Anonymous »

Когда я пытаюсь отфильтровать элементы std::vector перед применением std::ranges::minmax_element по какой-то причине я получаю std::ranges::dangling, с которым трудно справиться и который может не будет использоваться для получения доступа к найденным данным.
Как я могу объединить фильтрацию и проекцию элементов, чтобы можно было фильтровать элементы и находить итераторы по минимальному/максимальному значению?

Код: Выделить всё

#include 
#include 
#include 
#include 

struct S {
int n=0;
};

int main() {
std::vector v= { {1}, {2}, {3}, {4}, {5}, {6}, {7} };

const int excluder = 7;

auto it_max = std::ranges::minmax_element(
v | std::views::filter([=](const auto& s) { return s.n != excluder ; }),
std::less(), &S::n
).max;

std::cout n;
}
Вот ДЕМО.
Сообщение об ошибке:

Код: Выделить всё

:20:24: error: member reference type 'std::ranges::dangling' is not a pointer; did you mean to use '.'?
20 |     std::cout n;
|                  ~~~~~~^~
|                        .
:20:26: error: no member named 'n' in 'std::ranges::dangling'
20 |     std::cout n;
|                  ~~~~~~  ^
2 errors generated.
Compiler returned: 1
Кроме того, почему я получаю здесь std::ranges::dangling? Разве это не должно быть проще?


Подробнее здесь: https://stackoverflow.com/questions/791 ... ax-element

Вернуться в «C++»