2016-12-05 6 views
-1

私はオブジェクトのリストでソートアルゴリズムを使用する際に問題があります。ここに私のコードはsort()アルゴリズムを使用してオブジェクトのリストをソートするC++

#include <iostream> 
#include <string> 
#include <list> 
//#include <iterator> 
//#include <functional> 
#include <algorithm> 
using namespace std; 

class Project 
{ 
private: 
    string name; 
    int days; 
public: 
    Project(string n, int d) 
    { 
     name = n; 
     days = d; 
    } 
    int get_days() const 
    { 
     return days; 
    } 

    void show() const 
    { 
     cout << "Name of the project: " << name << endl; 
     cout << "Days to completion: " << days << endl; 
     cout << endl; 
    } 
}; 
static bool sortByAge(const Project &lhs, const Project &rhs) 
{ 
    return lhs.get_days() < rhs.get_days(); 
} 
int main() 
{ 
    list<Project> l1, l2; 
    Project ob1("Alpha", 120), ob3("Gama", 60), ob5("Omega", 200); 
    l1.push_back(ob1); 
    l1.push_back(ob3); 
    l1.push_back(ob5); 
    sort(l1.begin(), l1.end(), sortByAge); 
    cout << "LIST 1" << endl; 
    for (const auto& p : l1) 
    { 
     p.show(); 
    } 
system("pause"); 
} 

であり、これらの問題はstd::sortはランダムアクセスイテレータが必要ですが、それらをstd::list提供していないということであるエラー

Error 4 error C2676: binary '-' : 'std::_List_iterator<std::_List_val<std::_List_simple_types<Project>>>' does not define this operator or a conversion to a type acceptable to the predefined operator c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 3157 
Error 5 error C2780: 'void std::_Sort(_RanIt,_RanIt,_Diff,_Pr)' : expects 4 arguments - 3 provided c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 3157 
Error 3 error C2784: 'unknown-type std::operator -(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : could not deduce template argument for 'const std::_Revranit<_RanIt,_Base> &' from 'std::_List_iterator<std::_List_val<std::_List_simple_types<Project>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 3157 
Error 2 error C2784: 'unknown-type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::_List_iterator<std::_List_val<std::_List_simple_types<Project>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 3157 
Error 1 error C2784: 'unknown-type std::operator -(std::move_iterator<_RanIt> &,const std::move_iterator<_RanIt2> &)' : could not deduce template argument for 'std::move_iterator<_RanIt> &' from 'std::_List_iterator<std::_List_val<std::_List_simple_types<Project>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 3157 
+0

ようこそスタックオーバーフロー!あなたの質問にあなたのコードを貼り付けて、[mcve]を作成してください。だから、hastebinがインターネットから消えてからずっとずっと他の人に役に立つかもしれません。 –

+0

「[良い質問をどうやってどうやるの?]」(http://stackoverflow.com/help/how-to-ask) –

+0

ようこそ。他のサイトへのリンクや画像を参照しないでください。あなたの記事の読者があなたの記事の中でそれを見るのははるかに便利です。また、プログラム全体をコピー&ペーストしないでください。あなたは固執した数行のコードを参照してください。最後に、フレッドが先に述べたリンクを訪れてください。非常に役に立ちます。 – Christos

答えて

1

です。双方向イテレータのみをサポートしています。そのため、std::listにはsortというメンバー機能があります。だからstd::sort(l1.begin(), l1.end(), sortByAge)に電話する代わりにl1.sort(sortByAge)と呼んでください。

1

std::sortRandomAccessIterator

template< class RandomIt > 
void sort(RandomIt first, RandomIt last); 

しかしstd::list::iteratorBidirectionalIteratorで受け付けます。

リスト全体をソートするので、代わりにstd::list::sortを使用できます。

l1.sort(sortByAge); 
関連する問題