inplace_merge の使用方法です.
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
bool less_a(int a, int b)
{
return (bool)((a < b) ? 1 : 0);
};
class less_b : public binary_function<int, int, bool>
{
public:
result_type operator() (first_argument_type a, second_argument_type b)
{
return (result_type)((a < b) ? 1 : 0);
}
};
int main()
{
vector<int> v1, v2, v3;
vector<int>::iterator it;
// 初期設定
printf("**初期状態 v1**\n");
v1.push_back(5);
v1.push_back(10);
v1.push_back(4);
v1.push_back(3);
v1.push_back(7);
v1.push_back(1);
v1.push_back(9);
v1.push_back(8);
v1.push_back(6);
v1.push_back(2);
for (it = v1.begin(); it != v1.end(); it++)
printf(" %d", *it);
printf("\n");
// 半分ずつ小さい順にソート
printf("半分ずつ小さい順にソート\n");
sort(v1.begin(), v1.begin()+5);
sort(v1.begin()+5, v1.end());
// 以下の方法でも可能
// sort(v1.begin(), v1.begin()+5, less_a);
// sort(v1.begin()+5, v1.end(), less_a);
// sort(v1.begin(), v1.begin()+5, less_b());
// sort(v1.begin()+5, v1.end(), less_b());
// sort(v1.begin(), v1.begin()+5, less<int>());
// sort(v1.begin()+5, v1.end(), less<int>());
for (it = v1.begin(); it != v1.end(); it++)
printf(" %d", *it);
printf("\n");
// 全体をマージ
printf("全体をマージ\n");
inplace_merge(v1.begin(), v1.begin()+5, v1.end());
// 以下の方法でも可能
// inplace_merge(v1.begin(), v1.begin()+5, v1.end(), less_a);
// inplace_merge(v1.begin(), v1.begin()+5, v1.end(), less_b());
// inplace_merge(v1.begin(), v1.begin()+5, v1.end(), less<int>());
for (it = v1.begin(); it != v1.end(); it++)
printf(" %d", *it);
printf("\n");
return 0;
}
(出力)
**初期状態 v1**
5 10 4 3 7 1 9 8 6 2
半分ずつ小さい順にソート
3 4 5 7 10 1 2 6 8 9
全体をマージ
1 2 3 4 5 6 7 8 9 10