構造体のvectorのsortについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Cr

構造体のvectorのsortについて

#1

投稿記事 by Cr » 12年前

Crです。
さっそくですがプログラムです。

コード:

	typedf struct{
		int x;
		int y;
		int r;
		int v;
	} ufo;
	vector<ufo> vec;
この後、vecをx^2+y^2が小さい順にsortしたいのですが、どのようにすれば可能でしょうか?

Cr

Re: 構造体のvectorのsortについて

#2

投稿記事 by Cr » 12年前

すみません。間違えました。
x^2+y^2が小さい順ではなく、ここには出てないカウント用変数iをmain関数内で宣言して、
sqrt(x^2+y^2)-i*vが小さい順でsortしたいです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: 構造体のvectorのsortについて

#3

投稿記事 by h2so5 » 12年前

std::sortを使います。
引数に比較関数を渡せば任意の基準でソートできます。

http://www.geocities.jp/ky_webid/cpp/library/019.html
http://7ujm.net/stl/sort.html

アバター
GRAM
記事: 164
登録日時: 13年前
住所: 大阪

Re: 構造体のvectorのsortについて

#4

投稿記事 by GRAM » 12年前

vectorを使う以上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;
}

Cr

Re: 構造体のvectorのsortについて

#5

投稿記事 by Cr » 12年前

sortにそんな機能があったんですね
これに、vectorの構造体のメンバでないmain関数内で宣言されたint型のカウント用変数iを用いることは可能ですか?
みたところ、構造体のメンバでの比較しかできなさそうなのですが…

Cr

Re: 構造体のvectorのsortについて

#6

投稿記事 by Cr » 12年前

すみません、返信画面で暫く別のことをしていたらその間にGRAM様の返信があったのを見落としていました。
正直まだよく知識不足のせいで意味が分かってませんが、少し自分で調べてみます。
どうもありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る