---
title: "Problem med C++ sort()"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/74856-problem-med-c-sort"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "mangan"
published: "2003-04-24T10:46:00.000Z"
updated: "2003-04-25T22:55:35.000Z"
replies: 6
views: 267
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/74856-problem-med-c-sort"
---

# Problem med C++ sort()

## #1 — mangan, 2003-04-24T10:46Z

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

Permalänk: https://www.webforum.nu/p/74856

## #2 — PeW, 2003-04-24T15:38Z

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);
}
```

Permalänk: https://www.webforum.nu/p/1023885

## #3 — mangan, 2003-04-24T20:43Z

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-----------------------------------

Permalänk: https://www.webforum.nu/p/1024080

## #4 — PeW, 2003-04-25T13:08Z

Prova med 

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

 istället.

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

Permalänk: https://www.webforum.nu/p/1024531

## #5 — mangan, 2003-04-25T13:55Z

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.

Permalänk: https://www.webforum.nu/p/1024563

## #6 — PeW, 2003-04-25T14:48Z

Så det fungerar nu?

Permalänk: https://www.webforum.nu/p/1024626

## #7 — mangan, 2003-04-25T22:55Z

Det funkar fin fint!

Permalänk: https://www.webforum.nu/p/1025139

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/74856-problem-med-c-sort
