排序sort函数出错 应输入 2 个参数,却提供了 3 个

C++语言 码拜 10年前 (2015-05-11) 2729次浏览 0个评论

我想写一个成员函数用于做排序,sort函数的第三个参数compare_degree()是一个比较函数,我想把他封装到类成员函数里面,但是程序报错如下:
错误 1 error C3867: “matrix::compare_degree”:  函数调用缺少参数列表;请使用“&matrix::compare_degree”创建指向成员的指针 f:\work\project1\project1\test.cpp 45 1 Project1
错误 2 error C2780: “void std::sort(_RanIt,_RanIt)”: 应输入 2 个参数,却提供了 3 个 f:\work\project1\project1\test.cpp 45 1 Project1
于是,我尝试把这个比较函数写在的外面,重写了一个compare()的比较函数在却可以编译通过,请问各位大侠这是为什么呢?有没有办法把sort的第三个参数(比较函数)也作为类的成员函数封装进去呢?

#include <vector>
#include <algorithm>

using namespace std;

struct node
{
	int index;//节点序号
	int degree;//节点度
};
class matrix
{
public:
	matrix();
	~matrix();
	vector<node> sort_degree();
	bool compare_degree(node node_a, node node_b);
private:
	vector<node> nodes;
};
bool compare(node node_a, node node_b);

matrix::matrix()
{
}

matrix::~matrix()
{
}

bool matrix::compare_degree(node node_a, node node_b)
{
	//按照节点度降序排列
	return (node_a.degree > node_b.degree);
}
bool compare(node node_a, node node_b)
{
	//按照节点度降序排列
	return (node_a.degree > node_b.degree);
}
vector<node> matrix::sort_degree()
{
	vector<node> temp_nodes = nodes;
	//根据compare_degree规定的规则对数组内的节点排序
	sort(temp_nodes.begin(), temp_nodes.end(), compare_degree);
	sort(temp_nodes.begin(), temp_nodes.end(), compare);
	return temp_nodes;
}


int main(void)
{
	matrix G;
	vector<node> G_degree_rank;

	G_degree_rank = G.sort_degree();
}
怎么又问了一次
要想取成员函数,作为参数,该函数必须是static的。你把compare 声明加上static试试看
10分
    using namespace std::placeholders;
    vector<node> temp_nodes = nodes;
    //根据compare_degree规定的规则对数组内的节点排序
    sort(temp_nodes.begin(), temp_nodes.end(), bind(compare_degree,this,_1,_2));
引用 1 楼 cjqpker 的回复:

怎么又问了一次
要想取成员函数,作为参数,该函数必须是static的。你把compare 声明加上static试试看

的确可以,据说成员函数不带this指针,如果要把他作为参数的话得变成静态型才行

引用 2 楼 fly_dragon_fly 的回复:
    using namespace std::placeholders;
    vector<node> temp_nodes = nodes;
    //根据compare_degree规定的规则对数组内的节点排序
    sort(temp_nodes.begin(), temp_nodes.end(), bind(compare_degree,this,_1,_2));

请问这个bind函数是干嘛用的呢?能说一下这样改的理由么

10分
引用 4 楼 u013453604 的回复:
Quote: 引用 2 楼 fly_dragon_fly 的回复:
    using namespace std::placeholders;
    vector<node> temp_nodes = nodes;
    //根据compare_degree规定的规则对数组内的节点排序
    sort(temp_nodes.begin(), temp_nodes.end(), bind(compare_degree,this,_1,_2));

请问这个bind函数是干嘛用的呢?能说一下这样改的理由么

bind函数绑定
http://blog.csdn.net/zhangxiangdavaid/article/details/43638747

引用 5 楼 zhangxiangDavaid 的回复:
Quote: 引用 4 楼 u013453604 的回复:
Quote: 引用 2 楼 fly_dragon_fly 的回复:
    using namespace std::placeholders;
    vector<node> temp_nodes = nodes;
    //根据compare_degree规定的规则对数组内的节点排序
    sort(temp_nodes.begin(), temp_nodes.end(), bind(compare_degree,this,_1,_2));

请问这个bind函数是干嘛用的呢?能说一下这样改的理由么

bind函数绑定
http://blog.csdn.net/zhangxiangdavaid/article/details/43638747

原来如此,谢谢啦


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明排序sort函数出错 应输入 2 个参数,却提供了 3 个
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!