Как фильтровать вектор перед применением 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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