2016-02-15 105 views
-2

我想通過對象的屬性(3個字符串,1個整數,1個浮點數)對對象數組排序。我需要按照它們的整數對它們進行排序,從高到低排序,然後按字母順序排序。我無法理解如何訪問對象的一部分。排序對象數組的問題C++

這裏是我所有的代碼,我已經包含了一些用於排序的示例代碼。

#include<iostream> 
using namespace std; 

#include "video.h" 

int main() { 

    const int MAX = 100; 
    Video *video[MAX]; //up to 100 videos 

    for(int l = 0; l < MAX; l++) 
    { 
     video[l] = NULL; 
     // cout << video[l] << endl; //testing if all are equal to 0 
    } 

    string title; 
    string url; 
    string desc; 
    string sorting; 
    float length; 
    int rate; 

// cout << "What sorting method would you like to use?" << endl; 
    getline(cin, sorting); 
    //cout << "Enter the title, the URL, a comment, the length, and a rating for each video" << endl; 

    int t = 0; 

    while(getline(cin, title)) 
    { 
     getline(cin, url); 
     getline(cin, desc); 
     cin >> length; 
     cin >> rate; 
     cin.ignore(); 
     video[t] = new Video(title, url, desc, length, rate); 
     t++; 
    } 

for(int s = 0; s < t; s++){ 
    video[s]->print(); 
    } 

for(int e = 0; e < t; e++) 
{ 
delete video[e]; 
} 

// SORTING 

if(sorting == "length") { 
int q = 0; 
bool Video::longer(Video *video) 
{ return m_length > other->m_length; }} 

else if(sorting == "rating") { 

} 

else if(sorting == "title") { 
for(int r = 0; r < MAX; r++) { 

} 

else{ 
cerr << sorting << " is not a legal sorting method, giving up" << endl; 
return 1; } 


//this sorts the videos by length 
for(int last = num_videos -1; last > 0; last--) { 
for(int cur = 0; cur < last, cur++) { 
if(videos[cur]->loner(videos[cur+1])) { 
swap(videos[cure], videos[cur+1]); }}} 
+0

還有很多類似的現有問題(附答案) - 例如:[點擊這裏](HTTP://計算器。 COM /問題/ 19104153/C-排序對象爲基礎的對二數據成員)。如果你試圖遵循這種方法並陷入困境,請展示你的代碼並記錄下你遇到的具體問題。 –

+0

我已經瀏覽了許多關於此的帖子,但是沒有一個實際的過程是以對我有意義的方式解釋的,並且可以應用於我的特定程序。 – Jessie

+0

如果你能顯示你已經完成的工作,只需添加你當前的代碼,並且我們可以幫助你看到錯誤的地方 –

回答

0

如果您希望超出默認值(使用運算符<)進行任何排序(排序),您必須編寫自己的比較函數。

讓我們有一個類:

class Example 
{ 
public: 
    std::string thing1; 
    std::string thing2; 
    std::string thing3; 
    int   int1; 
    float  f1; 
}; 

std::sort功能將通過引用兩個對象。如果第一個參數出現在第二個參數之前,則比較函數需要返回true

bool comparison(const Example& a, const Example& b) 
{ 
    // Compare by their integers. 
    if (a.int1 < b.int1) 
    { 
    return true; 
    } 
    if (a.int1 > b.int1) 
    { 
    return false; 
    } 
    // We can assume the integers are equal. 
    // Now to compare by strings. 
    if (a.thing1 != b.thing1) 
    { 
    return a.thing1 < b.thing1; 
    } 
    // The first strings are equal at this point. 
    // Compare the second versus the second. 
    // Which is left as an exercise for the reader. 
    return false; 
} 

如果這些對象的std::vector,然後使用std::sort功能:

std::vector<Example> many_examples; 
std::sort(many_examples.begin(), many_examples.end(), comparison);