Crです。
さっそくですがプログラムです。
この後、vecをx^2+y^2が小さい順にsortしたいのですが、どのようにすれば可能でしょうか?
構造体のvectorのsortについて
Re: 構造体のvectorのsortについて
すみません。間違えました。
x^2+y^2が小さい順ではなく、ここには出てないカウント用変数iをmain関数内で宣言して、
sqrt(x^2+y^2)-i*vが小さい順でsortしたいです。
x^2+y^2が小さい順ではなく、ここには出てないカウント用変数iをmain関数内で宣言して、
sqrt(x^2+y^2)-i*vが小さい順でsortしたいです。
Re: 構造体のvectorのsortについて
std::sortを使います。
引数に比較関数を渡せば任意の基準でソートできます。
http://www.geocities.jp/ky_webid/cpp/library/019.html
http://7ujm.net/stl/sort.html
引数に比較関数を渡せば任意の基準でソートできます。
http://www.geocities.jp/ky_webid/cpp/library/019.html
http://7ujm.net/stl/sort.html
Re: 構造体のvectorのsortについて
vectorを使う以上C++の知識が多少なりいります。
関数オブジェクトというものを使用すれば解決しますが、(C++11ではラムダ式でうまく書けますがここでは割愛します)
C言語にこだわるのでしたらもうこういうもんだと思っていただくのが一番早いです
関数オブジェクトというものを使用すれば解決しますが、(C++11ではラムダ式でうまく書けますがここでは割愛します)
C言語にこだわるのでしたらもうこういうもんだと思っていただくのが一番早いです
#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;
}
Re: 構造体のvectorのsortについて
sortにそんな機能があったんですね
これに、vectorの構造体のメンバでないmain関数内で宣言されたint型のカウント用変数iを用いることは可能ですか?
みたところ、構造体のメンバでの比較しかできなさそうなのですが…
これに、vectorの構造体のメンバでないmain関数内で宣言されたint型のカウント用変数iを用いることは可能ですか?
みたところ、構造体のメンバでの比較しかできなさそうなのですが…
Re: 構造体のvectorのsortについて
すみません、返信画面で暫く別のことをしていたらその間にGRAM様の返信があったのを見落としていました。
正直まだよく知識不足のせいで意味が分かってませんが、少し自分で調べてみます。
どうもありがとうございました!
正直まだよく知識不足のせいで意味が分かってませんが、少し自分で調べてみます。
どうもありがとうございました!