最近更新したページ
2013-10-20
2013-09-29
2013-09-23
2012-01-07
2011-11-09
2011-10-23
2011-10-09
2011-10-01
2011-09-29
2011-09-03
2011-08-07
2011-08-02
2011-07-29
2011-07-10
2011-05-05
2011-05-04
2011-04-24
2011-04-13
2011-04-05
2011-03-26
2011-02-18
2011-02-15
2010-12-26
2010-12-07
2010-12-05
2010-11-23
2010-09-28
2010-09-23
2010-08-26
2010-08-22
2010-07-16
2010-01-17
2010-01-11
2009-10-04
2009-08-21
2009-08-13
2009-06-18
2009-06-01
2009-04-29
2009-02-16
2009-02-11
2009-02-03
2008-07-22
2008-07-21
2008-07-15
2008-07-14
2008-07-13
2008-07-12
2008-07-08
2008-07-05
2008-06-28
2008-06-17
2008-06-05
2008-06-02
2008-06-01
2008-05-29
2008-05-26
2008-05-21
2008-05-19
2008-05-18
2007-10-31
2007-10-27
2007-09-28
2007-09-23
2007-09-17
2007-09-16
2007-09-14
2007-09-11
2007-06-18
2007-04-15
2006-12-21
2006-11-30
2006-11-22
2006-08-17
2006-03-29
2006-03-28
2006-03-27

C/C++ STL partial_sort_copy


C/C++ ソート


STL algrithm partial_sort_copy

 partial_sort の別配列抽出コピー版。別配列抽出であるが別に早い訳でもない。
 元データを破壊しないので、そうした一時抽出用途に便利。抽出要素数が多いと当然メモリ消費もその分増える。

ソートテストで使用した関数サンプル

 ※このサンプルは、main_sort.cpp をメインとして分割(分割コンパイル)された一部。
 メイン、ヘッダー、共通関数等は、分割コンパイルの頁を参照。

sub_sort_pcp.cpp
//#include <iostream>
//#include <time.h>
//#include <string>
#include <vector>
#include <algorithm>
#include <functional>   // プレディケート less<Type>() greater<Type>()
using namespace std;

#include "main_sort.h"

// -----------------------------------------
// ソート関数
// -----------------------------------------

/*****************************
partial_sort_copy 1,2,3
*****************************/
void pcp_sort1(vector < int > & v) {              // 参考:4.8170
   vector < int > ::iterator first    = v.begin();
   vector < int > ::iterator middle   = first + PARTIAL_SIZE;
   vector < int > ::iterator last     = v.end();
   // ----------------------------
   vector < int > result(PARTIAL_SIZE);
   vector < int > ::iterator r_first  = result.begin();
   vector < int > ::iterator r_middle = r_first + PARTIAL_SIZE;
   vector < int > ::iterator r_last   = result.end();
   // ----------------------------
// dsp_arr(&v[0], (int)v.size());
   // ----------------------------
   partial_sort_copy(first, last, r_first, r_middle);
// partial_sort_copy(first, last, r_first, r_middle, greater<int>());
   // ----------------------------
// dsp_arr(&result[0], PARTIAL_SIZE);
}
void pcp_sort2(vector < int > & v) {              // 参考:4.4360
   vector < int > ::iterator first    = v.begin();
   vector < int > ::iterator middle   = first + PARTIAL_SIZE;
   vector < int > ::iterator last     = v.end();
   // ----------------------------
   vector < int > result(PARTIAL_SIZE);
   vector < int > ::iterator r_first  = result.begin();
   vector < int > ::iterator r_middle = r_first + PARTIAL_SIZE;
   vector < int > ::iterator r_last   = result.end();
   // ----------------------------
// dsp_arr(&v[0], (int)v.size());
   // ----------------------------
   partial_sort_copy(first, last, r_first, r_middle, asc1_cmp);
// partial_sort_copy(first, last, r_first, r_middle, des1_cmp);
   // ----------------------------
// dsp_arr(&result[0], PARTIAL_SIZE);
}
void pcp_sort3(vector < int > & v) {              // 参考:4.8770
   vector < int > ::iterator first    = v.begin();
   vector < int > ::iterator middle   = first + PARTIAL_SIZE;
   vector < int > ::iterator last     = v.end();
   // ----------------------------
   vector < int > result(PARTIAL_SIZE);
   vector < int > ::iterator r_first  = result.begin();
   vector < int > ::iterator r_middle = r_first + PARTIAL_SIZE;
   vector < int > ::iterator r_last   = result.end();
   // ----------------------------
// dsp_arr(&v[0], (int)v.size());
   // ----------------------------
   partial_sort_copy(first, last, r_first, r_middle, asc2_cmp());
// partial_sort_copy(first, last, r_first, r_middle, des2_cmp());
   // ----------------------------
// dsp_arr(&result[0], PARTIAL_SIZE);
}
※result(PARTIAL_SIZE) は、コピー先配列。vector としてるが、通常配列でも良いかも...
※イテレータ利用へ変更した。大分長くなってしまった。
※partial_sort の別配列へ抽出コピー版。別配列抽出であるが、別に早い訳でもない。


▲上へ [ 編集 ]


リンク


内部リンク


外部リンク


  • 現在ありません

▲上へ
2008年07月21日(月) 21:14:13 Modified by cafeboy1




スマートフォン版で見る