NiceFox Temat założony przez niniejszego użytkownika |
STL sortowanie i wyszukiwanie rekordów Vector » 2014-08-15 19:44:51 Potrzebuje w Vector sortować rekordy wg jednej wybranej kolumny, oraz wyszukiwać rekordy z zawartością kilu zmiennych. Do funkcji sortf posyłam 2 zmienne typu float nie wiem dlaczego wywala błąd , czy funkcja musi zawierać całą strukturę classy? Error 122 error C2664: 'Sygnal::sortf' : cannot convert parameter 1 from 'float' to 'Sygnal' Error 123 error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided Class Signal
bool Sygnal::sortf( Sygnal i, Sygnal j ) { return( i.hi > j.lo ); }
int main()
sort( syg.begin(), syg.end(), sygnal->sortf( syg[ z ].lo, syg[ z ].hi ) |
|
pekfos |
» 2014-08-15 19:50:47 std::sort( syg.begin(), syg.end(), std::greater < Signal >() );
+nagłówki i operator>. Lub tak sort( syg.begin(), syg.end(), Signal::sortf )
std::sort ma otrzymać coś, co można wywołać. Lambdę, funkcję, obiekt, itp.. |
|
1aam2am1 |
» 2014-08-15 19:51:06 Edit. |
|
NiceFox Temat założony przez niniejszego użytkownika |
» 2014-08-15 20:03:19 sort( iterator start, iterator koniec, cmp ); //cmp - funkcja porównująca
funkcja sort powinna mieć 3 argumenty nie 2 tak podają w turialach, kompilator vs2010, Nie wklejam całego kodu bo jest b.długi
no to mnie wyedytowałeś :)
Ta metoda też błąd wywala: sort(syg.begin(), syg.end(),Sygnal::sortf(syg[ z ].lo, syg[ z ].hi));
Error 122 error C2664: 'Sygnal::sortf' : cannot convert parameter 1 from 'float' to 'Sygnal' Error 123 error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3
std::sort( syg.begin(), syg.end(), std::greater < Sygnal >() );
Error 131 error C2676: binary '>' : 'const Sygnal' does not define this operator or a conversion to a type acceptable to the predefined operator
Tutaj też błąd , powinien być jakiś iterator? |
|
pekfos |
» 2014-08-15 20:18:43 funkcja sort powinna mieć 3 argumenty nie 2 tak podają w turialach | std::sort jest przeciążone dla 2 i 3 argumentów. Ta metoda też błąd wywala: sort(syg.begin(), syg.end(),Sygnal::sortf(syg[ z ].lo, syg[ z ].hi)); |
To co tu nawyrabiałeś to więcej niż niezbędne modyfikacje. |
|
NiceFox Temat założony przez niniejszego użytkownika |
» 2014-08-15 20:38:14 Po poprawkach też blędy
sort( syg.begin(), syg.end(), Sygnal::sortf );
Error 123 error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided
Error 122 error C3867: 'Sygnal::sortf': function call missing argument list; use '&Sygnal::sortf' to create a pointer to member
|
|
pekfos |
» 2014-08-15 20:42:28 Error 122 error C3867: 'Sygnal::sortf': function call missing argument list; use '&Sygnal::sortf' to create a pointer to member | sortf() musi być statyczne. |
|
NiceFox Temat założony przez niniejszego użytkownika |
» 2014-08-18 17:54:45 sortuje tą metodą : bool Greater( const Sygnal & a, const Sygnal & b ) { if( a.hi == b.hi ) return( a.hi < b.hi ); }
sort( syg.begin(), syg.end(), Greater ); ale problem jest po program się wywala , info z debugera coś takiego "Expression: vector subscript out of range" jakie mogą być przyczyny tego? |
|
« 1 » 2 3 |