Форум программистов, компьютерный форум CyberForum.ru

stl sort vector не сортирует ?! - C++

Восстановить пароль Регистрация
 
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
21.06.2013, 16:41     stl sort vector не сортирует ?! #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Playlist
{
private:
    std::vector<Song> s_container;
public:
    Playlist()
    {
        s_container=std::vector<Song>();
    }
    double getPlaylistLengthInMinutes()const;
    void addSongToPlaylist(const Song& song);
    void removeSongFromPlaylist(const Song& song);
    bool isSongInPlaylist(const Song& song);
    void playPlaylist();
     std::vector<Song>& getPlaylistVector(){return s_container;}//return the vector of songs in playlist
};
 
class SongCompare//functor to sort songs in radiostation database,uses songs less operator
{
public:
    bool operator()(const Song& s1, const Song& s2) const
    {
        return s1<s2;
    }
};
 
class PlaylistCompare//functor  to sort songs in playlist by its length or name(alphabetic)
{
    public:
    bool operator()( const Song& s1,const Song& s2)const
    {
        if(s1.getSongLengthInMinutes()!=s2.getSongLengthInMinutes())
        return s1.getSongLengthInMinutes()>s2.getSongLengthInMinutes();
        return s1.getSongName()<s2.getSongName();
    }
};


problem is here i think:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void RadioStation::addPlaylist(const Playlist& pl)
{
    if((pl.getPlaylistLengthInMinutes())>12)
        return;
    rs_playlist.push_back(pl);
    PlaylistCompare greater;
    //std::vector<Song>::const_iterator start=pl.getPlaylistVector().begin();
    //while(start!=pl.getPlaylistVector().end())
        //{
            //std::cout<<"BefoRE "<<start->getSongName()<<std::endl;
            //start++;
    //}
    std::vector<Song>::iterator start=rs_playlist.back().getPlaylistVector().begin();
    std::vector<Song>::iterator end=rs_playlist.back().getPlaylistVector().end();
    std::sort(start,end,greater);
    //std::vector<Song>::const_iterator
        //start=pl.getPlaylistVector().begin();
    while(start!=end)
        {
            std::cout<<"AFTER "<<start->getSongName()<<std::endl;
            start++;
    }
}
Добавлено через 5 минут
когда делаю сорт в 15-ой строчке возвращает ту ж последоательность как и в начале
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2013, 16:41     stl sort vector не сортирует ?!
Посмотрите здесь:

C++ (STL LIST SORT) Сортировка по некольким критериям
реализация Shell Sort в stl C++
C++ STL sort()
C++ vector<vector<double>> + std::sort()
C++ С++ Builder STL copy/sort multiset
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newyork7776
 Аватар для newyork7776
346 / 339 / 79
Регистрация: 21.05.2013
Сообщений: 1,305
Завершенные тесты: 1
21.06.2013, 16:47     stl sort vector не сортирует ?! #2
а можна задание задачи?
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
21.06.2013, 16:53  [ТС]     stl sort vector не сортирует ?! #3
@newyork7776,
отсортировать вектор класса Playlist в функции addPlaylist класса Radiostation
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
21.06.2013, 17:02     stl sort vector не сортирует ?! #4
Цитата Сообщение от Stasito Посмотреть сообщение
std::vector<Song>& getPlaylistVector(){return s_container;}
ты ж копию возвращаешь.
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
21.06.2013, 17:02  [ТС]     stl sort vector не сортирует ?! #5
рад тебя видеть @gray_fox,
что delete?
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
21.06.2013, 17:04     stl sort vector не сортирует ?! #6
возвращай по ссылке по ходу

Добавлено через 1 минуту
Цитата Сообщение от Stasito Посмотреть сообщение
рад тебя видеть @gray_fox,
что delete?
это значит, что он что-то написал и удалил потом
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
21.06.2013, 17:07  [ТС]     stl sort vector не сортирует ?! #7
@Dani, you mean
return & s_container?!
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
21.06.2013, 17:09     stl sort vector не сортирует ?! #8

Не по теме:

Могу лишь сказать, что если rs_playlist всегда отсортирован, то, вместо того, чтобы добавлять новый элемент в конец и сортировать весь vector, можно найти нужную позицию и вставить туда.



Добавлено через 1 минуту
Цитата Сообщение от Dani Посмотреть сообщение
ты ж копию возвращаешь.
Цитата Сообщение от Dani Посмотреть сообщение
C++
1
std::vector<Song>&
:/ Ссылка же
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
21.06.2013, 17:11     stl sort vector не сортирует ?! #9
@Stasito, нет, это адрес будет. Нужно указать другой тип, возвращаемые функцией.
C++
1
int& foo (int a, int b) {}
Добавлено через 1 минуту
aaa, не заметил
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
21.06.2013, 17:25  [ТС]     stl sort vector не сортирует ?! #10
@Dani, убрал ссылку то же самое
Цитата Сообщение от Dani Посмотреть сообщение
Нужно указать другой тип, возвращаемые функцией
это про какую функцию?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.06.2013, 17:32     stl sort vector не сортирует ?! #11
Ищите проблему в коде. sort тут ни при чем.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <vector>
#include <algorithm>
 
class Song
{
public:
   Song(const std::string& nm, int d) :
      name(nm), duration(d)
   {
   }
   int getSongLengthInMinutes() const
   {
      return duration;
   }
   std::string getSongName() const
   {
      return name;
   }
private:
   std::string name;
   int duration;
};
 
class PlaylistCompare
{
public:
   bool operator () (const Song& s1, const Song& s2) const
   {
      return s1.getSongLengthInMinutes() != s2.getSongLengthInMinutes() ?
         s1.getSongLengthInMinutes() > s2.getSongLengthInMinutes() :
         s1.getSongName() < s2.getSongName();
   }
};
 
int main()
{
   std::vector<Song> songs =
   {
      {"first", 3},
      {"second", 5},
      {"third", 2},
      {"other", 3}
   };
   PlaylistCompare greater;
   auto start = songs.begin(), end = songs.end();
   std::sort(start, end, greater);
   for (const Song& s : songs)
   {
      std::cout << s.getSongName() << " " << s.getSongLengthInMinutes() << std::endl;
   }
}
Код
second 5
first 3
other 3
third 2
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
21.06.2013, 17:39  [ТС]     stl sort vector не сортирует ?! #12
@ForEveR,
wow
fatst and furious
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2013, 18:34     stl sort vector не сортирует ?!
Еще ссылки по теме:

Не работает сортировка Stl sort C++
C++ Не работает функция sort (vector, vector)
Sort vector, сортировка по двум полям структуры C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MrGluck
21.06.2013, 18:34     stl sort vector не сортирует ?!
  #13

Не по теме:

Цитата Сообщение от Stasito Посмотреть сообщение
fatst and furious
fats and furious?

Yandex
Объявления
21.06.2013, 18:34     stl sort vector не сортирует ?!
Ответ Создать тему
Опции темы

Текущее время: 21:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru