• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sortowanie tablicy struktury za pomocą std::array

VPS Starter Arubacloud
0 głosów
202 wizyt
pytanie zadane 24 września 2019 w C i C++ przez Teslum_369 Gaduła (4,190 p.)

Witam,

Chciałbym posortować tablicę przy użyciu std::array, lecz niestety coś nie chce działać.

Kod:

#include <iostream>
#include <algorithm>
#include <array>
using namespace std;


struct Human
{
	char name[11];
	unsigned age;
	
	bool operator>(const Human& x)const
	{
		return age > x.age;
	}
};

int main()
{
	
	array<Human, 3> tab{
	"K", 18,
	"J", 17,
	"M", 25,
	};

	sort(tab.begin(), tab.end()); //pewnie tutaj jest błąd :(

	for (short unsigned c{}; c < 3; ++c)
	{
		cout << tab[c].name << ' ' << tab[c].age << '\n';		
	}



	cin.ignore();
	return 0;
}

Gdy używam tablic statycznych (zwykłych) wszystko działa (no, ale troszkę kod jednak się zmienia, lecz nie znacząco), gdy próbuję zrobić to samo z tablicami std::array to nie potrafię temu zaradzić.

Przyznam się szczerze, że trochę idę z tym kodem na ciemno, bo sam do końca nie rozumiem np tej linijki:

bool operator>(const Human& x)const

Jeżeli ktoś mógłby wytłumaczyć wszystko w przystępny sposób będę bardzo wdzięczny :)

Pozdrawiam! :)

2 odpowiedzi

+2 głosów
odpowiedź 24 września 2019 przez adrian17 Ekspert (349,240 p.)
edycja 24 września 2019 przez adrian17
 
Najlepsza

Przyznam się szczerze, że trochę idę z tym kodem na ciemno, bo sam do końca nie rozumiem np tej linijki:

bool operator>(const Human& x)const

std::sort musi wiedzieć, jak tablica ma być posortowana - innymi słowy, który element będzie przed którym. Żeby to przekazać, możesz zdefiniować operator< (nie >), który mówi, kiedy jeden obiekt jest "mniejszy" od drugiego. (alternatywnie można też przekazać funkcję jako argument do std::sort).

komentarz 24 września 2019 przez Teslum_369 Gaduła (4,190 p.)
Łał, cały czas się głowiłem nad int main a  tymczasem chodziło tylko o zmianę ">" na "<". Dzięki :)
+1 głos
odpowiedź 24 września 2019 przez mokrowski Mędrzec (156,260 p.)
Najprościej, użyj i zaimplementuj operator< bo on domyślnie jest wywoływany. A jeśli chcesz odwrócić sortowanie, zmień jego implemetację (ciało), lub zastosuj wersję std::sort z własnym komparatorem (np. lambda).

Podobne pytania

0 głosów
0 odpowiedzi 413 wizyt
pytanie zadane 24 marca 2018 w C i C++ przez Mateusz Tocha Bywalec (2,560 p.)
+1 głos
1 odpowiedź 410 wizyt
pytanie zadane 21 maja 2015 w C i C++ przez Radfler VIP (101,030 p.)
0 głosów
2 odpowiedzi 894 wizyt
pytanie zadane 12 lutego 2020 w C i C++ przez Xementis Nowicjusz (120 p.)

92,980 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,307 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...