Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
#1

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

21.06.2013, 16:41. Просмотров 756. Ответов 12
Метки нет (Все метки)

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-ой строчке возвращает ту ж последоательность как и в начале
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2013, 16:41
Ответы с готовыми решениями:

Vector sort не сортирует
Добрый день, подскажите, пожалуйста. Мне необходимо отсортировать вектор в...

vector<vector<double>> + std::sort()
Позвольте узнать... Возможно ли через vector&lt;vector&lt;double&gt;&gt; и функцию...

Не работает функция sort (vector, vector)
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;vector&gt; #include &lt;string&gt;...

Merge sort, сортирует не в том порядке что нужно
Здравствуйте, подскажите пожалуйста, правильна ли в данном коде...

STL sort()
кто знает и где можно посмотреть за какое время работает сортировка sort() в...

12
newyork7776
350 / 343 / 279
Регистрация: 21.05.2013
Сообщений: 1,312
Завершенные тесты: 1
21.06.2013, 16:47 #2
а можна задание задачи?
0
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
21.06.2013, 16:53  [ТС] #3
@newyork7776,
отсортировать вектор класса Playlist в функции addPlaylist класса Radiostation
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
21.06.2013, 17:02 #4
Цитата Сообщение от Stasito Посмотреть сообщение
std::vector<Song>& getPlaylistVector(){return s_container;}
ты ж копию возвращаешь.
0
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
21.06.2013, 17:02  [ТС] #5
рад тебя видеть @gray_fox,
что delete?
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
21.06.2013, 17:04 #6
возвращай по ссылке по ходу

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

Не по теме:

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



Добавлено через 1 минуту
Цитата Сообщение от Dani Посмотреть сообщение
ты ж копию возвращаешь.
Цитата Сообщение от Dani Посмотреть сообщение
C++
1
std::vector<Song>&
:/ Ссылка же
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
21.06.2013, 17:11 #9
@Stasito, нет, это адрес будет. Нужно указать другой тип, возвращаемые функцией.
C++
1
int& foo (int a, int b) {}
Добавлено через 1 минуту
aaa, не заметил
0
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
21.06.2013, 17:25  [ТС] #10
@Dani, убрал ссылку то же самое
Цитата Сообщение от Dani Посмотреть сообщение
Нужно указать другой тип, возвращаемые функцией
это про какую функцию?
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
21.06.2013, 17:32 #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
1
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
21.06.2013, 17:39  [ТС] #12
@ForEveR,
wow
fatst and furious
0
MrGluck
21.06.2013, 18:34     stl sort vector не сортирует ?!
  #13

Не по теме:

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

0
21.06.2013, 18:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2013, 18:34
Привет! Вот еще темы с ответами:

Не работает сортировка Stl sort
вот код сортировки массива обычным stl sort () #include&lt;conio.h&gt;...

реализация Shell Sort в stl
Всем привет! Кто-нибудь знает, есть ли в Stl реализация сортировки Шелла? ...

Sort - vector Страуструп
Всем привет. Начал читать книгу Страуструпа, сделал упражнение как написано в...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru