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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Stasito
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 25
#1

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

21.06.2013, 16:41. Просмотров 661. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос stl sort vector не сортирует ?! (C++):

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

Не работает функция sort (vector, vector) - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;algorithm&gt; using namespace std; class...

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

Merge sort, сортирует не в том порядке что нужно - C++
Здравствуйте, подскажите пожалуйста, правильна ли в данном коде последовательность исполнения сортировки методом merge sort? Я пошагово...

STL sort() - C++
кто знает и где можно посмотреть за какое время работает сортировка sort() в STL &lt;algorithm&gt;??

реализация Shell Sort в stl - C++
Всем привет! Кто-нибудь знает, есть ли в Stl реализация сортировки Шелла? std::sort() реализован на основе быстрой сортировки, есть...

12
newyork7776
349 / 342 / 80
Регистрация: 21.05.2013
Сообщений: 1,311
Завершенные тесты: 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 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 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 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 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!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
21.06.2013, 17:09 #8

Не по теме:

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



Добавлено через 1 минуту
Цитата Сообщение от Dani Посмотреть сообщение
ты ж копию возвращаешь.
Цитата Сообщение от Dani Посмотреть сообщение
C++
1
std::vector<Song>&
:/ Ссылка же
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 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
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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?

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

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

STL sort строк string по убыванию - C++
Как по возрастанию - знаю:std::vector&lt;std::string&gt; obj; std::string str(&quot;asdfghjkl&quot;); vector.push_back(str); for (auto &amp;index : obj)...

С++ Builder STL copy/sort multiset - C++
есть две проблемы: 1) ф-ция copy не компилируеться multiset&lt;double&gt; MS,MS2; multiset&lt;double&gt;::iterator msIter; ///здесь...

(STL LIST SORT) Сортировка по некольким критериям - C++
Здравствуйте! Столкнулся с такой проблемой при сортировке списка. %-) Есть структура: struct PackObject { bool ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.06.2013, 18:34
Ответ Создать тему
Опции темы

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