C++使用STL中的sort对std的vector,list等容器进行排序

std的sort函数可以对vector、list等容器进行排序,两者使用方法基本一致,这里以vector为例说明;

主要介绍3点:

1.使用简单类型排序;

2.使用自定义数据结构排序;

3.使用Lambda排序;

 

1.使用简单类型排序,这个比较简单;

	std::vector vec = { 9,5,7,8,4,1,2,6,3,10 };
	std::cout << "int sort before:" << std::endl;
	for each (const auto& var in vec)
		std::cout << var << "	";
	std::sort(vec.begin(), vec.end());
	std::cout << "\nsort after:" << std::endl;
	for each (const auto& var in vec)
		std::cout << var << "	";

输出如下:

2.使用自定义数据结构排序,此时要么使用第三种方法,使用Lambda表达式,要么重载 < 符号即可:

自定义数据结构:

struct MyNode
{
	int _value;
	MyNode(int value)
		:_value(value){};
	bool operator<(const MyNode& other) const 
	{
		return _value < other._value;
	}
};

重载了 < 符号就和上面 int 类型一样使用就可以排序:

	std::vector vecNode;
	vecNode.emplace_back(MyNode(9));
	vecNode.emplace_back(MyNode(5));
	vecNode.emplace_back(MyNode(7));
	vecNode.emplace_back(MyNode(8));
	vecNode.emplace_back(MyNode(4));
	vecNode.emplace_back(MyNode(1));
	vecNode.emplace_back(MyNode(2));
	vecNode.emplace_back(MyNode(6));
	vecNode.emplace_back(MyNode(3));
	vecNode.emplace_back(MyNode(10));

	std::cout << "\nMyNode sort before:" << std::endl;
	for each (auto& var in vecNode)
		std::cout << var._value << "	";

	std::sort(vecNode.begin(), vecNode.end());

	std::cout << "\nMyNode sort  after:" << std::endl;

	for each (auto& var in vecNode)
		std::cout << var._value << "	";

输出如下:

3.使用Lambda排序;

使用Lambda排序;

	std::cout << "\nLambda sort before:" << std::endl;
	for each (auto& var in vecNode)
		std::cout << var._value << "	";

	std::sort(vecNode.begin(), vecNode.end(), [&](MyNode node1, MyNode node2)
	{
		return node1._value < node2._value;
	});

	std::cout << "\nLambda sort after:" << std::endl;
	for each (auto& var in vecNode)
		std::cout << var._value << "	";

输出如下:

你可能感兴趣的:(数据结构,c++,stl)