在一个类中按数组中的属性对对象进行排序,这些对象本身就是另一个类的对象
sorting objects by attribute in an array within a class which are themselves objects of another class
我正在尝试对存储在另一个对象中的对象数组进行排序,然后显示排序后的对象。我想按特定的属性对这些对象进行排序。我不太确定应该如何运行sort((方法。
composer.h
class Composer {
Public:
int get_ranking();
..
..
};
数据库.h
Class Database {
Public:
void DisplayAll(){
for(int i=0;i<next_slot_;i++){
composers_[i].Display();
}
};
bool SortByRank(Composer const & a, Composer const & b) {
return a.get_ranking() < b.get_ranking();
};
void DisplayByRank(){
sort(composers_, composers_+next_slot_, SortByRank);
DisplayAll();
};
testdatabase.cpp
int main(){
Database myDB;
Composer& comp1 = myDB.AddComposer("Ludwig van", "Beethoven", "Romantic", 1770,
"Beethoven was completely deaf during the latter part of his life - he
never heard a performance of his 9th symphony.");
comp1.Promote(7);
Composer& comp2 = myDB.AddComposer("Johann Sebastian", "Bach", "Baroque", 1685,
"Bach had 20 children, several of whom became famous musicians as well.");
comp2.Promote(5);
cout << endl << "all Composers: " << endl << endl;
myDB.DisplayAll();
myDB.DisplayByRank();
当我运行这个时,我得到:
错误:将"const Composer"作为"int Composer::get_ranking(("的"this"参数传递会丢弃限定符[-fpermission]return a.get_rankinging((<b.get_ranking((;
和
错误:对"sort(Composer[100],Composer*,未解析的重载函数类型("的调用没有匹配的函数排序(composers_,composers_+next_slot_,SortByRank(;
在get_ranking((的末尾添加const似乎解决了const正确性错误。
您应该将const
添加到get_ranking
方法中。
class Composer {
public:
int get_ranking() const;
};
这是C++常量正确性的一部分。这意味着该方法不会改变调用它的对象的内部状态(很少使用的mutable
字段除外(,并允许const
对象调用该方法。
好吧,所以我读了很多书,学到了一些东西。
在通过将int get_ranking();
更改为int get_ranking()const
来解决我的常量正确性之后,结果发现我的SortByRank((仍然不起作用。这是因为它是数据库的非静态成员,需要this
指针。只需将其更改为:static bool SortByRank();
或在Database类之外定义SortByRank((即可解决问题。
相关文章:
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 对象接收堆栈溢出异常 c++ 的排序向量
- 如何使用 STL 排序对具有模板专用化的自定义类对象进行排序?
- 排序谓词没有传递对索引对象的引用?
- 使用指针指向对象C++对向量进行排序
- 按类成员的顺序对包含类对象的C++向量进行排序
- 无法使用接口类型对priority_queue中的对象进行排序<T>
- 基于不同字段的对象向量的排序功能
- 基于3个对象的自定义排序
- 尝试使用比较运算符对对象向量进行排序
- C++排序的对象集
- 从文件中读取并将其内容放入对象数组中,然后对它们进行排序
- q排序类对象的列表
- std::atexit 从全局对象的构造函数调用时的排序
- 尝试对对象数组进行排序时程序终止
- std::排序为排序自定义对象时出现的向量引发错误
- 通过其char键对对象指针的C 向量进行排序
- 排序算法,使用模板按内部数据对对象进行排序
- 在对象向量中的对象字段排序
- 如何使用 std::sort 对数组中的特定对象进行排序