2015-10-13 40 views
0

我想按升序對輸入進行排序。但它似乎只排序整數..我基於冒泡排序的排序方法..很抱歉,如果我的職位是太亂了。我的第一篇文章在這裏:(如何對類中的數組值排序

using namespace std; 

struct movies_t{ 

    string title; 
    int year; 
}films[3]; 

void printmovie (movies_t movie); 

int main() 
{ 
    string mystr; 
    int n,t; 
    string d; 

    for(n=0;n<3;n++) 
    { 

     cout <<"Enter title:"; 
     getline(cin,films[n].title); 
     cout <<"Enter year:"; 
     getline(cin,mystr); 
     stringstream (mystr)>> films[n].year; 

    } 

    for(n=0;n<3;n++) 
    { 
     for(int y=0; y<3; y++) 
     { 
      if(films[n].year < films[y].year) 
      { 
       t = films[n].year; 
       films[n].year = films[y].year; 
       films[y].year = t; 
      } 

      if(films[n].title < films[y].title) 
      { 
       d = films[n].title; 
       films[n].title = films[y].title; 
       films[y].title = d; 
      } 
     } 
    } 

    cout <<"\n You have entered these movies:\n"; 
    for(n=0;n<3;n++) 
     printmovie (films[n]); 
    return (0); 
} 

void printmovie(movies_t movie) 
{ 
    cout <<movie.title; 
    cout <<"("<<movie.year<<")\n"; 
} 

的輸出繼電器

 Enter title:a 
    Enter year:2001 
    Enter title:d 
    Enter year:2011 
    Enter title:f 
    Enter year:2005 

    You have entered these movies: 
    a(2001) 
    d(2005) 
    f(2011) 

我想輸出是:

 You have entered these movies: 
    a(2001) 
    f(2005) 
    d(2011) 

回答

1

你應該比較影片的一年,但整體更換元素,不僅他們的頭銜,就像這樣:

d = films[n]; 
films[n] = films[y]; 
films[y]= d; 
+0

這似乎工作。謝謝:) – user3349472

+0

這個答案打破了標題和年份之間的關係 – vishal

1

對數組進行排序的更有效或更簡潔的方法可能是將運算符<添加到結構中,然後使用std :: sort進行排序。這也可以解決你的排序功能問題。

struct movies_t{ 

    string title; 
    int year; 

    bool operator<(const movies_t& rhs) const 
    { 
     if (year < rhs.year) 
      return true; 
     if (year > rhs.year) 
      return false; 
     return title < rhs.title; 
    } 

}films[3]; 

替換排序代碼:

#include <algorithm> 

std::sort(films, films + n); 
相關問題