1:问题描述
定义了一个 struct结构体如下:
struct Review {
string title;
int rating;
}
定义如上结构体,当我们通过sort() 排序时,看看会出现什么结果。
void test6() {
vector<Review> books;
Review rv = { "a", 1 };
books.push_back(rv);
Review rv0 = { "a", 20 };
books.push_back(rv0);
Review rv1 = { "c", 25 };
books.push_back(rv1);
Review rv2 = { "dfe", 10};
books.push_back(rv2);
Review rv3 = { "ghr", 70 };
books.push_back(rv3);
Review rv4 = { "d", 25 };
books.push_back(rv4);
sort(books.begin(), books.end());
for (vector<Review>::iterator it = books.begin(); it < books.end(); it++)
{
cout << it->rating << " " << it->title << endl;
}
cout << endl;
}
int main() {
test6();
}
运行结果可知
当我们,自定义对象 或者结构体, 调用STL 标准 sort()排序函数时,会报错
当看到第二个错误
未能使函数模板“unknown-type std::less<void>::operator ()(_Ty1 &&,_Ty2 &&) noexcept(<expr>) const”专用化
解决方案
如果容器是自定义元素,则使用sort()函数排序,需要自定义排序规则
下面我自定义一个 comparetor接口,并重载 < 操作符,实现自定义排序规则
运行结果:可知,是可以正确排序的
2:完整代码
#include<iostream>
#include<deque>
#include<algorithm>
#include<vector>
using namespace std;
// 重载 <运算符
bool operator<(const Review& r1, const Review& r2) {
// 实现升序
if (r1.rating < r2.rating)
{
return true;
}
if ((r1.title).compare(r2.title)<0)
{
return true;
}
return false;
}
// 排序接口
bool comparetor(const Review& r1, const Review& r2) {
return r1 < r2;
}
void test6() {
vector<Review> books;
Review rv = { "a", 1 };
books.push_back(rv);
Review rv0 = { "a", 20 };
books.push_back(rv0);
Review rv1 = { "c", 25 };
books.push_back(rv1);
Review rv2 = { "dfe", 10};
books.push_back(rv2);
Review rv3 = { "ghr", 70 };
books.push_back(rv3);
Review rv4 = { "d", 25 };
books.push_back(rv4);
sort(books.begin(), books.end());
for (vector<Review>::iterator it = books.begin(); it < books.end(); it++)
{
cout << it->rating << " " << it->title << endl;
}
cout << endl;
}
int main() {
test6();
}