Problem z użyciem std::max_element z wyrażeniem lambda. Dlaczenie nie można utworzyć mapy z tablicą?

0
using pair_type = decltype(Guards)::value_type;
	auto g2 = std::max_element(Guards.begin(), Guards.end(),
		[](const pair_type& p1, const pair_type& p2) {
		return (*std::max_element(p1.second.begin(), p1.second.end()) < *std::max_element(p2.second.begin(), p2.second.end())) ? p2 : p1; });

Chcąc znaleźć wartości maksymalną według wektora w mapie, wywala mi błąd i nie chce się skompilować.
Co tutaj jest nie tak ?

Druga część problemu, dlaczego nie mogę utworzyć mapy, gdzie kluczem będzie std::array<int, 60> ?
std::map<int, std::vector<int>> Guards; przechodzi tylko wektor. Po zadeklarowaniu tablicy nie mogę się do niej odwołać.

0

Jeśli chodzi o drugą część problemu to kluczem w mapie może być tylko niemutowalny obiekt czyli np. int, stringi. std::array jest mutowalne z tego co kojarzę

0
kameleo327 napisał(a):

Druga część problemu, dlaczego nie mogę utworzyć mapy, gdzie kluczem będzie std::array<int, 60> ?

Nie ma żadnego problemu. W przypadku unordered_map zapewne musiałbyś zdefiniować funkcję hashującą, ale ze zwyczajną map działa "od ręki".

0

lambda powinna zwracać bool, więc co tam robi ternary operator ... ? p2 : p1;?

1 użytkowników online, w tym zalogowanych: 0, gości: 1