-1

当我尝试使用 C++ 中的比较方法对对象进行排序时,我遇到了一个非常奇怪的错误

required from 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Album*, std::vector<Album> >; _Compare = bool (*)(const Album*, const Album*)]'

这似乎不是标准错误,但我看不出我的代码有什么问题。是比较方法的问题,还是排序本身的问题。任何帮助将不胜感激。

我附上了相关代码:

专辑.cpp: http ://pastebin.com/0tNrbdrT

专辑.h: http ://pastebin.com/iY2Yy7qM

AlbumCollection.cpp:http ://pastebin.com/gWj0nS8S

AlbumCollection.h:http ://pastebin.com/bFrxme5n

专辑收藏排序:

void AlbumCollection::sortAlbums(){
   std::sort(albums.begin(), albums.end(), compareAlbums);
}

专辑比较方法:

bool Album::compareAlbums(const Album* a1,const Album* a2)
{
    if (a1->getArtist() == a2->getArtist()){
        return (a1->getTitle() < a2->getTitle());
    }else{
        return a1->getArtist() < a2->getArtist()
    }
}

错误是: http: //pastebin.com/PeXk0FUT

我不确定有多少是相关的,我对 C++ 很陌生

4

2 回答 2

3

这里有两个错误。首先, compareAlbums 函数需要是一个自由函数,而不是 Album 类的成员函数。其次, compareAlbums 函数必须对 Album 对象进行 const 引用,因为这是您存储在向量中的内容。所以,这应该解决它:

bool compareAlbums(const Album& a1,const Album& a2)
{
    if (a1.getArtist() == a2.getArtist()){
        return (a1.getTitle() < a2.getTitle());
    } else {
        return a1.getArtist() < a2.getArtist()
    }
}
于 2012-12-11T16:23:02.780 回答
1

您尝试std::vector使用将指针作为参数的函数对 a 进行排序。比较函数被赋予对其参数的引用,而不是指针。

直接的问题应该简单地通过比较函数和调整它来解决

bool compare(const Album*, const Album*)

bool compare(Album const &, Album const &)
于 2012-12-11T16:22:00.780 回答