• 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

Object Storage Arubacloud
0 głosów
179 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 (344,860 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 (155,460 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 360 wizyt
pytanie zadane 24 marca 2018 w C i C++ przez Mateusz Tocha Bywalec (2,560 p.)
+1 głos
1 odpowiedź 378 wizyt
pytanie zadane 21 maja 2015 w C i C++ przez Radfler VIP (101,030 p.)
0 głosów
2 odpowiedzi 778 wizyt
pytanie zadane 12 lutego 2020 w C i C++ przez Xementis Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...