webForumDet fria alternativet

Problem med C++ sort()

6 svar · 246 visningar · startad av mangan

manganMedlem sedan feb. 2003216 inlägg
#1

Har problem med att sortera objekt i en vector mha av sort() funktionen. Lite kod:

// ----------- movie.h ---------------------------
#include <vector>
#include <fstream>

class Movie {
public:
  Movie();
  string title;
private:
  string director;
  int year;
  string country;
  int imdb_id;
  vector<string> actors;
  string genre;
  double my_rating;
  int runtime;
};

// -------------- slut movie.h --------------------

objekten skapas och läggs in i en vector som heter filmer. All inläggning funkar fint men det uppstår problem när jag vill sortera objekten på deras titel.


//kod i main.cpp
sort(filmer.begin(), filmer.end(), sortera_title);

//sortera_title i metoder.cpp
bool sortera_title(Movie & f1, Movie & f2) {
  if(f1.title < f2.title)
    return true;
  else if(f1.title == f2.title)
    return true;
  else
    return false;
}

Efter det att jag la till sort() i main.cpp så funkar inte kompileringen utan jag får en massa kryptiska felmeddelanden.
Känns som om jag har glömt ngt litet men kan inte se vad.

Mvh Mangan

PeWMedlem sedan juni 200010 432 inlägg
#2

Men släng upp din errorkod då, människa ;)

bool sortera_title(Movie & f1, Movie & f2) {
  if(f1.title < f2.title)
    return true;
  else if(f1.title == f2.title)
    return true;
  else
    return false;
}

Kan istället skrivas:

bool sortera_title(Movie & f1, Movie & f2) {
 return (f1.title.compare(f2.title)<0);
}
manganMedlem sedan feb. 2003216 inlägg
#3

hehe, misstänkte att det skulle klagas på den metoden! :D

well, här kommer hela kompilatorloggen från Dev-C++:

-------------------------------börjar-----------------------------------

Kompilator: Default compiler
Building Makefile: "E:\C++\lab1\Makefile.win"
Kör make...
make.exe -f "E:\C++\lab1\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"C:/Program Files/Dev-Cpp/include/c++" -I"C:/Program Files/Dev-Cpp/include/c++/mingw32" -I"C:/Program Files/Dev-Cpp/include/c++/backward" -I"C:/Program Files/Dev-Cpp/include"

C:/Program Files/Dev-Cpp/include/c++/bits/stl_algo.h: In function `const _Tp&

std::__median(const _Tp&, const _Tp&, const _Tp&, _Compare) [with _Tp =
Movie, _Compare = bool (*)(Movie&, Movie&)]':
C:/Program Files/Dev-Cpp/include/c++/bits/stl_algo.h:2147: instantiated from `void std::__introsort_loop(_RandomAccessIter, _RandomAccessIter, _Size, _Compare) [with _RandomAccessIter = __gnu_cxx::__normal_iterator<Movie*, std::vector<Movie, std::allocator<Movie> > >, _Size = int, _Compare = bool (*)(Movie&, Movie&)]'
C:/Program Files/Dev-Cpp/include/c++/bits/stl_algo.h:2209: instantiated from `void std::sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = __gnu_cxx::__normal_iterator<Movie*, std::vector<Movie, std::allocator<Movie> > >, _Compare = bool (*)(Movie&, Movie&)]'
main.cpp:44: instantiated from here
C:/Program Files/Dev-Cpp/include/c++/bits/stl_algo.h:124: could not convert `
__a' to `Movie&'

C:/Program Files/Dev-Cpp/include/c++/bits/stl_algo.h:125: could not convert `
__b' to `Movie&'
C:/Program Files/Dev-Cpp/include/c++/bits/stl_algo.h:127: could not convert `
__a' to `Movie&'
C:/Program Files/Dev-Cpp/include/c++/bits/stl_algo.h:131: could not convert `
__a' to `Movie&'
C:/Program Files/Dev-Cpp/include/c++/bits/stl_algo.h:133: could not convert `
__b' to `Movie&'

make.exe: *** [main.o] Error 1

Körning avslutad

-------------------------------slutar-----------------------------------

PeWMedlem sedan juni 200010 432 inlägg
#4

Prova med

sort(filmer.begin(), filmer.end(), sortera_title());

istället.

http://www.sgi.com/tech/stl/functors.html

manganMedlem sedan feb. 2003216 inlägg
#5

fumka inte, men jag la till const på 2 ställen istället......

bool sortera_title(const Movie & f1, const Movie & f2)

tragiskt att jag inte hittade det innan....tack för hjälpen iaf.

PeWMedlem sedan juni 200010 432 inlägg
#6

Så det fungerar nu?

manganMedlem sedan feb. 2003216 inlägg
#7

Det funkar fin fint!

132 ms totalt · 3 externa anrop · v20260731065814-full.16f3d68c
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)