構造体のvectorのsortについて
Posted: 2011年9月18日(日) 23:16
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
struct ufo{
ufo( int x, int y, int r, int v):
x_(x),y_(y),r_(r),v_(v){}
int x_;
int y_;
int r_;
int v_;
};
vector<ufo> vec;
//比較用関数オブジェクト
struct comp{
comp( const int& i )
:i_(i)
{
}
bool operator()( const ufo& lhs, const ufo& rhs ){
//この中身を変えることによって評価が変わる
double lv = sqrt( static_cast<double>( lhs.x_*lhs.x_ + lhs.y_*lhs.y_ ) ) - i_*lhs.v_;
double rv = sqrt( static_cast<double>( rhs.x_*rhs.x_ + rhs.y_*rhs.y_ ) ) - i_*rhs.v_;
return lv < rv;
}
const int& i_;
};
//確認のため内容を表示する関数
void PrintUfo( const ufo& u ){
cout << u.x_ << u.y_ << u.r_ << u.v_ <<endl;
}
int main(){
int i = 1;
vec.push_back( ufo(1, 1, 2, 3) );
vec.push_back( ufo(4, 4, 2, 3) );
vec.push_back( ufo(3, 3, 2, 3) );
vec.push_back( ufo(2, 2, 2, 3) );
//ソート
sort( vec.begin(), vec.end(), comp(i) );
for( int i = 0; i < 4; ++i ){
PrintUfo( vec[i] );
}
return 0;
}