2009年08月05日

std::sortのメモ

本業でvectorをあんまり使わないので(使えないので)、忘れないようにvectorのソート方法のメモ。

vectorコンテナをソートする場合は、stlのalgorithmのstd::sort(クイックソート)を使うと簡単にできる。

下記は、
 x,y,z情報を持ったTestPointクラスをz値が小さい順にソートする。
場合の例。
 
◆比較用のクラスを使用してソート

#include<algorithm>
#include<iostream>
#include<vector>

class TestPoint
{
public:
float x;
float y;
float z;
};
//比較用クラス
class CompPoint
{
public:
bool operator()(const TestPoint &a,const TestPoint &b) const{
if(a.z < b.z)
{//昇順にした場合にaがbより前方になる場合はtrue
return true;
}else{//昇順にした場合にaがbより後方になる場合はfalse
return false;
}
}
};

//ソート用のダミーデータを作成
vector<TestPoint> dummy;
int s = 0;
while(s < 100)
{
TestPoint tmp;
tmp.x = 0;
tmp.y = 0;
tmp.z = 1.f*(rand()%100);
dummy.push_back(tmp);

s++;
}

//ソート
std::sort(dummy.begin(),dummy.end(),CompPoint());

//ソート結果の表示
vector<TestPoint>::iterator Ite = dummy.begin();
while(Ite != dummy.end())
{
std::cout << "x:" << Ite->x << ",y:" << Ite->y << ",z:" << Ite->z;

Ite++;
}


◆比較演算子を実装してソート

#include<algorithm>
#include<iostream>
#include<vector>

class TestPoint
{
public:
float x;
float y;
float z;

//比較演算子
bool operator<(const TestPoint &in) const
{
if(this->z < in.z)
{//昇順にした場合にthisがinより前方になる場合はtrue
return true;
}else{//昇順にした場合にthisがinより後方になる場合はfalse
return false;
}
}
};

//ソート用のダミーデータを作成
vector<TestPoint> dummy;
int s = 0;
while(s < 100)
{
TestPoint tmp;
tmp.x = 0;
tmp.y = 0;
tmp.z = 1.f*(rand()%100);
dummy.push_back(tmp);

s++;
}

//ソート
std::sort(dummy.begin(),dummy.end());

//ソート結果の表示
vector<TestPoint>::iterator Ite = dummy.begin();
while(Ite != dummy.end())
{
std::cout << "x:" << Ite->x << ",y:" << Ite->y << ",z:" << Ite->z;

Ite++;
}


便利過ぎて、sort関係のアルゴリズムが頭から抜けていってしまいそう・・・。


posted by purigen at 22:56| Comment(1) | TrackBack(0) | C++ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
バッグ グッチ
Posted by 水着 ビキニ at 2013年07月19日 17:48
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。