c++ - C++,在类指针向量上使用 std::sort - 或者我无法正确命名我的函数
问题描述
实际问题:我将我的函数命名为“排序”,它在没有指定标准的情况下调用排序,现在我觉得很愚蠢。
解决方案:重命名我的函数并从现在开始显式调用 std::sort (就像我的教授以外的每个人都建议我这样做)。
我试图通过根据该类中的字符串对类(Song)指针的向量(cat)进行排序来找出 std::sort 。
我特别试图在Class pointers 的向量上调整这个解决方案 std::sort(),但没有成功。
我能想到的最好的是:
void Catalog::sort()
{
sort(cat.begin(), cat.end(), compareTitle );
return;
}
bool compareTitle(Song* a, Song* b)
{
return(a->getTitle().compare(b->getTitle()) < 0);
}
这里的 compareTitle 不是类函数。编译器返回
catalog.cpp: In member function ‘void Catalog::sort()’:
catalog.cpp:62:44: error: no matching function for call to ‘Catalog::sort(std::vector<Song*>::iterator, std::vector<Song*>::iterator, bool (&)(Song*, Song*))’
62 | sort(cat.begin(), cat.end(), compareTitle );
| ^
catalog.cpp:59:6: note: candidate: ‘void Catalog::sort()’
59 | void Catalog::sort()
| ^~~~~~~
catalog.cpp:59:6: note: candidate expects 0 arguments, 3 provided
我也试过
void Catalog::sort()
{
sort(cat.begin(), cat.end(), [](Song* a, Song* b){
return(a->getTitle().compare(b->getTitle()) < 0);
});
return;
}
这给了我
catalog.cpp: In member function ‘void Catalog::sort()’:
catalog.cpp:66:7: error: no matching function for call to ‘Catalog::sort(std::vector<Song*>::iterator, std::vector<Song*>::iterator, Catalog::sort()::<lambda(Song*, Song*)>)’
66 | } );
| ^
catalog.cpp:59:6: note: candidate: ‘void Catalog::sort()’
59 | void Catalog::sort()
| ^~~~~~~
catalog.cpp:59:6: note: candidate expects 0 arguments, 3 provided
任何建议表示赞赏;我的搜索没有结果。
解决方案
您正在为名称查找的工作方式而苦苦挣扎。在Catalog::sort
中,当您使用不合格的sort
时,编译器会Catalog::sort
再次出现 - 成员函数尝试调用自身。但是由于函数签名不匹配,编译器会抱怨。
您可以通过明确地为您的呼叫添加前缀来解决此问题,即
std::sort(cat.begin(), cat.end(),
[](const Song *lhs, const Song *rhs) { /* ... */ });
请注意,这里的 lambda 是要走的路,传递成员函数指针(如在您的第一个示例中)不会像这样工作。
最后,确保<algorithm>
包含标题。
推荐阅读
- javascript - Node.js 应用程序退出(崩溃),在 SQLite3 数据库连接关闭时没有可捕获的错误/信号
- c++ - 使用 Windows API 获取键盘输入的更好方法?
- java - 使用 gradle 使用 SWRL API 创建 SWRL 规则的依赖问题
- python - 具有索引 groupby 的列的熊猫乘积
- xml - 如何在不创建向导的情况下将按钮添加到表单视图的操作
- flutter - 发生异常时重新加载当前屏幕
- javascript - 为什么要切片不纯的管道?
- mysql - MYSQL 5.7.20 - 按合并列的顺序左连接 - 非常奇怪的行为
- android - 如何以编程方式将 .apk 安装到 android 设备中?
- php - 为什么redis服务器报错,redis服务器运行正常而我的php框架是Laravel