函数原型
//按照默认的升序排序规则,对 [first, last) 范围的数据进行筛选并排序 templateinline 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)
在一个容器范围内取出符合规则的元素。
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;
#includebind#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;
#includelambda#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;
#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;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)