1. 程式人生 > 其它 >C++使用STL中的sort對std的vector,list等容器進行排序

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

技術標籤:資料結構c++stl

std的sort函式可以對vector、list等容器進行排序,兩者使用方法基本一致,這裡以vector為例說明;

主要介紹3點:

1.使用簡單型別排序;

2.使用自定義資料結構排序;

3.使用Lambda排序;

1.使用簡單型別排序,這個比較簡單;

	std::vector<int> 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<MyNode> 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 << "	";

輸出如下: