局部排序
-
partial_sort(b, se, e)
-
partial_sort(b, se, e, p)
-
partial_sort_copy(sb, se, db, de)
- 源區間
,目标區間[sb, se)
[db, de)
- 傳回值:複制後的元素的下一個位置
- 源區間
-
partial_sort_copy(sb, se, db, de, p)
- 預設從小到大升序排序。
partial_sort()
代碼示例
partial_sort()
#include <iostream>
#include <deque>
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
deque<int> ideq;
for (int i = 3; i <= 7; ++i)
ideq.push_back(i);
for (int i = 2; i <= 6; ++i)
ideq.push_back(i);
for (int i = 1; i <= 5; ++i)
ideq.push_back(i);
cout << "ideq原始資料:" << endl;
for (deque<int>::iterator iter = ideq.begin();
iter != ideq.end(); ++iter)
cout << *iter << ' ';
cout << endl;
cout << "隻排序前5個資料:(從小到大)" << endl;
partial_sort(ideq.begin(), ideq.begin() + 5, ideq.end());
for (deque<int>::iterator iter = ideq.begin();
iter != ideq.end(); ++iter)
cout << *iter << ' ';
cout << endl;
cout << "隻排序前5個資料:(從大到小)" << endl;
partial_sort(ideq.begin(), ideq.begin() + 5, ideq.end(), greater<int>());
for (deque<int>::iterator iter = ideq.begin();
iter != ideq.end(); ++iter)
cout << *iter << ' ';
cout << endl;
return 0;
}
partial_sort_copy()
代碼示例
partial_sort_copy()
#include <iostream>
#include <vector>
#include <deque>
#include <algorithm>
#include <functional>
#include <iterator>
using namespace std;
int main()
{
deque<int> ideq;
vector<int> ivec6(6), ivec30(30);
for (int i = 3; i <= 7; ++i)
ideq.push_back(i);
for (int i = 2; i <= 6; ++i)
ideq.push_back(i);
for (int i = 1; i <= 5; ++i)
ideq.push_back(i);
cout << "ideq原始資料:" << endl;
for (deque<int>::iterator iter = ideq.begin();
iter != ideq.end(); ++iter)
cout << *iter << ' ';
cout << endl;
// 将ideq全部資料排序并拷貝到vec6(空間不夠),則隻複制6個
vector<int>::iterator pos6;
pos6 = partial_sort_copy(ideq.begin(), ideq.end(),
ivec6.begin(), ivec6.end());
copy(ivec6.begin(), ivec6.end(), ostream_iterator<int>(cout, " "));
cout << endl;
copy(ivec6.begin(), pos6, ostream_iterator<int>(cout, " "));
cout << endl;
// 将ideq全部資料排序并拷貝到vec30
vector<int>::iterator pos;
pos = partial_sort_copy(ideq.begin(), ideq.end(),
ivec30.begin(), ivec30.end(), greater<int>());
copy(ivec30.begin(), ivec30.end(), ostream_iterator<int>(cout, " "));
cout << endl;
copy(ivec30.begin(), pos, ostream_iterator<int>(cout, " "));
cout << endl;
return 0;
}