C++ STL list.sort( ) 高级用法

文章目录

        • 一般情况(非自定义数据类型)
        • 特殊情况(使用自定义的数据类型,如struct、class)
        • 示例代码

使用C++的STL又踩了一个坑,记录一下。
应该也适用algorithm中的sort,举一反三。

一般情况(非自定义数据类型)

list<int> lst;

我们可以直接使用**.sort()方法直接排序,得到一个升序**的list。

如果我们想得到一个降序的list,可以这样写:

/*自定义一个函数,名称非固定。
 *参数的顺序可以看成list中的参数顺序*/
bool compare(int a,int b){
     
    return a>=b;
}

/*在使用list.sort()时传入函数名*/
int main(){
     
    list<int> lst;
    lst.sort(compare);
}

特殊情况(使用自定义的数据类型,如struct、class)

需要在内部重载运算符,参考链接。

#include
using namespace std;

struct edge {
     
	int a, b;
	int weight;
    
    /*重载运算符 '<' 
     *只接受一个参数即与之比较的对象
     *operator、this为关键字*/
	bool operator < (edge b) {
     
		return  this->weight < b.weight;
	}
};

int main(){
     
    list<edge> lst;
    
    /*自行填充list*/
    
    lst.sort();//得到一个升序的list
    
    return 0;
}

到这里,实现了升序排列,如果需要降序排列,还需要重载 ‘>’ ,之后就可以按照一般情况的写法写比较函数了:

#include
#include
using namespace std;

struct edge {
     
	int a, b;
	int weight;
    /*重载 '<' */
	bool operator < (edge b) {
     
		return  this->weight < b.weight;
	}
    /*重载 '>'*/
	bool operator > (edge b) {
     
		return this->weight > b.weight;
	}
};

bool compare(edge a,edge b) {
     
	return a > b;
}

int main() {
     
	list<edge> edges;
    /*自行填充list*/
	edges.sort(compare);
    return 0;
}

示例代码

#include
#include
using namespace std;

bool comp(int a, int b) {
     
	return a > b;
}

int main() {
     
	list<int> l;
	for (int i = 0; i < 5; i++) {
     
		int temp;
		cin >> temp;
		l.push_back(temp);
	}

	l.sort();
	for (list<int>::iterator it = l.begin(); it != l.end(); it++)
		cout << *it;
    
	l.sort(comp);
	for (list<int>::iterator it = l.begin(); it != l.end(); it++)
		cout << *it;
}

你可能感兴趣的:(数据集结构与算法,算法,stl)