C++: 进阶之路:解决使用algorithm库里面的sort函数的时候,编译报错:未能使函数模板“unknown-type std::less<void>::operator ()

1:问题描述

定义了一个 struct结构体如下:

struct  Review {

        string title;

        int rating;

}

定义如上结构体,当我们通过sort() 排序时,看看会出现什么结果。

void  test6() {
	vector 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::iterator it = books.begin(); it < books.end(); it++)
	{
		cout << it->rating << " " << it->title << endl;
	}
	cout << endl;
}

int main() {
	test6();
}

 C++: 进阶之路:解决使用algorithm库里面的sort函数的时候,编译报错:未能使函数模板“unknown-type std::less<void>::operator ()_第1张图片

运行结果可知 

当我们,自定义对象 或者结构体, 调用STL 标准  sort()排序函数时,会报错

当看到第二个错误未能使函数模板“unknown-type std::less::operator ()(_Ty1 &&,_Ty2 &&) noexcept() const”专用化

解决方案

 如果容器是自定义元素,则使用sort()函数排序,需要自定义排序规则

下面我自定义一个  comparetor接口,并重载  <  操作符,实现自定义排序规则

C++: 进阶之路:解决使用algorithm库里面的sort函数的时候,编译报错:未能使函数模板“unknown-type std::less<void>::operator ()_第2张图片

C++: 进阶之路:解决使用algorithm库里面的sort函数的时候,编译报错:未能使函数模板“unknown-type std::less<void>::operator ()_第3张图片

 运行结果:可知,是可以正确排序的

2:完整代码 

#include
#include
#include
#include
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 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::iterator it = books.begin(); it < books.end(); it++)
	{
		cout << it->rating << " " << it->title << endl;
	}
	cout << endl;
}

int main() {
	test6();
}

你可能感兴趣的:(#,C++进阶(常见错误),c++,sort排序函数)