C++ STL算法partial

C++ STL算法partial,第1张

C++ STL算法partial

函数原型

//按照默认的升序排序规则,对 [first, last) 范围的数据进行筛选并排序
template inline
void partial_sort(_RanIt _First, _RanIt _Mid, _RanIt _Last)

//按照pred规则对 [first, last) 范围的数据进行筛选并排序
template inline
void partial_sort(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Pr _Pred)

在一个容器范围内取出符合规则的元素。

first, mid 排序起始位置,排序结束位置

last 查找结束位置

pred 函数指针或函数对象或lambda表达式

partial_sort(排序的起始位置,排序的结束位置,查找的结束位置);
partial_sort(排序的起始位置,排序的结束位置,查找的结束位置,自定义排序比较方法);
注意:排序的结束位置必须在排序的起始位置和查找的结束位置之间。

不带谓词
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main()
{	
	std::vector c{1, 3, 7, 3, 10, 8, 19, 2, 3, 4, 75, 8};
    //查找范围在前10个元素范围内
	std::partial_sort(std::begin(c), std::begin(c) + 5, std::begin(c) + 10);
	std::copy(std::begin(c), std::end(c), std::ostream_iterator(std::cout, "; "));

	return -1;
}

//输出
1; 2; 3; 3; 4; 10; 8; 19; 7; 4; 4; 75; 8;
带谓词 函数
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

bool isEven(int a, int b)
{
	std::cout << "a = " << a << "b = " << b << std::endl;
	return  a < b;
}

int main()
{	
	std::vector c{1, 3, 7, 4, 10, 8, 19, 2, 3, 4, 75, 8};
	std::partial_sort(std::begin(c), std::begin(c) + 5, std::begin(c) + 10, isEven);
	std::copy(std::begin(c), std::end(c), std::ostream_iterator(std::cout, "; "));

	return -1;
}

//输出
a = 10b = 4
a = 10b = 3
a = 7b = 10
a = 10b = 7
a = 3b = 4
a = 4b = 3
a = 4b = 1
a = 8b = 10
a = 10b = 8
a = 7b = 4
a = 7b = 8
a = 8b = 7
a = 19b = 8
a = 2b = 8
a = 8b = 2
a = 7b = 4
a = 7b = 2
a = 3b = 7
a = 7b = 3
a = 2b = 4
a = 4b = 2
a = 3b = 1
a = 3b = 3
a = 4b = 4
a = 2b = 3
a = 3b = 2
a = 1b = 3
a = 3b = 1
a = 3b = 3
a = 2b = 3
a = 3b = 2
a = 3b = 1
a = 1b = 2
a = 2b = 1

1; 2; 3; 3; 4; 10; 19; 8; 7; 4; 75; 8;
仿函数
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

class IsEven
{
public:
	IsEven(){}

	bool operator()(int a, int b)
	{
		std::cout << "a = " << a << "; b = " << b << std::endl;
		return a < b;
	}
};

int main()
{	
	std::vector c{1, 3, 7, 4, 10, 8, 19, 2, 3, 4, 75, 8};
	std::partial_sort(std::begin(c), std::begin(c) + 5, std::begin(c) + 10, IsEven());
	std::copy(std::begin(c), std::end(c), std::ostream_iterator(std::cout, "; "));

	return -1;
}

//输出
a = 10; b = 8
a = 7; b = 4
a = 7; b = 8
a = 8; b = 7
a = 19; b = 8
a = 2; b = 8
a = 8; b = 2
a = 7; b = 4
a = 7; b = 2
a = 3; b = 7
a = 7; b = 3
a = 2; b = 4
a = 4; b = 2
a = 3; b = 1
a = 3; b = 3
a = 4; b = 4
a = 2; b = 3
a = 3; b = 2
a = 1; b = 3
a = 3; b = 1
a = 3; b = 3
a = 2; b = 3
a = 3; b = 2
a = 3; b = 1
a = 1; b = 2
a = 2; b = 1
1; 2; 3; 3; 4; 10; 19; 8; 7; 4; 75; 8;
bind
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

bool isEven(int a, int b)
{
	std::cout << "a = " << a << "b = " << b << std::endl;
	return  a < b;
}

class IsEven
{
public:
	IsEven(){}

	bool operator()(int a, int b)
	{
		std::cout << "a = " << a << "; b = " << b << std::endl;
		return a < b;
	}
};

int main()
{	
	std::vector c{1, 3, 7, 4, 10, 8, 19, 2, 3, 4, 75, 8};
	auto f1 = std::bind(isEven, std::placeholders::_1, std::placeholders::_2);
	std::partial_sort(std::begin(c), std::begin(c) + 5, std::begin(c) + 10, f1);
	std::copy(std::begin(c), std::end(c), std::ostream_iterator(std::cout, "; "));
	std::cout << std::endl;

	std::cout << "**************" << std::endl;
	std::vector d(c);
	auto f2 = std::bind(IsEven(), std::placeholders::_1, std::placeholders::_2);
	std::partial_sort(std::begin(c), std::begin(c) + 6, std::begin(c) + 10, f2);
	std::for_each(std::begin(c), std::end(c), [](int value) { std::cout << value << "; "; });
	std::cout << std::endl;

	return -1;
}

//输出
a = 10b = 4
a = 10b = 3
a = 7b = 10
a = 10b = 7
a = 3b = 4
a = 4b = 3
a = 4b = 1
a = 8b = 10
a = 10b = 8
a = 7b = 4
a = 7b = 8
a = 8b = 7
a = 19b = 8
a = 2b = 8
a = 8b = 2
a = 7b = 4
a = 7b = 2
a = 3b = 7
a = 7b = 3
a = 2b = 4
a = 4b = 2
a = 3b = 1
a = 3b = 3
a = 4b = 4
a = 2b = 3
a = 3b = 2
a = 1b = 3
a = 3b = 1
a = 3b = 3
a = 2b = 3
a = 3b = 2
a = 3b = 1
a = 1b = 2
a = 2b = 1
1; 2; 3; 3; 4; 10; 19; 8; 7; 4; 75; 8;
**************
a = 10; b = 3
a = 4; b = 3
a = 4; b = 2
a = 10; b = 4
a = 3; b = 1
a = 19; b = 10
a = 8; b = 10
a = 10; b = 8
a = 3; b = 4
a = 4; b = 3
a = 2; b = 3
a = 3; b = 2
a = 3; b = 8
a = 8; b = 3
a = 4; b = 8
a = 8; b = 4
a = 7; b = 8
a = 8; b = 7
a = 3; b = 4
a = 4; b = 3
a = 2; b = 3
a = 3; b = 2
a = 3; b = 7
a = 7; b = 3
a = 4; b = 7
a = 7; b = 4
a = 4; b = 7
a = 7; b = 4
a = 3; b = 4
a = 4; b = 3
a = 2; b = 3
a = 3; b = 2
a = 3; b = 4
a = 4; b = 3
a = 4; b = 4
a = 3; b = 4
a = 4; b = 3
a = 2; b = 3
a = 3; b = 2
a = 3; b = 1
a = 3; b = 3
a = 3; b = 2
a = 2; b = 3
a = 3; b = 2
a = 3; b = 1
a = 1; b = 2
a = 2; b = 1
1; 2; 3; 3; 4; 4; 19; 10; 8; 7; 75; 8;
lambda
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main()
{	
	std::vector c{1, 3, 7, 4, 10, 8, 19, 2, 3, 4, 75, 8};
	auto f1 = std::bind(isEven, std::placeholders::_1, std::placeholders::_2);
	std::partial_sort(std::begin(c), std::begin(c) + 5, std::begin(c) + 10,
		[](int a, int b) { std::cout << "a =" << a << "; b =" << b << std::endl; return a > b; });
	std::copy(std::begin(c), std::end(c), std::ostream_iterator(std::cout, "; "));
	std::cout << std::endl;

	return -1;
}

//输出
a =1; b =3
a =8; b =1
a =1; b =8
a =7; b =3
a =3; b =7
a =10; b =4
a =4; b =10
a =4; b =8
a =19; b =3
a =3; b =19
a =7; b =4
a =4; b =7
a =10; b =8
a =8; b =10
a =8; b =19
a =2; b =4
a =3; b =4
a =4; b =4
a =7; b =8
a =7; b =10
a =10; b =8
a =8; b =10
a =8; b =19
a =19; b =10
a =10; b =19
19; 10; 8; 7; 4; 1; 3; 2; 3; 4; 75; 8;

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5702762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存