0

通常sort、C++ の比較関数は 2 つの引数を取ります。

sort(v.begin(),v.end(),compare);

bool compare(int a,int b)
.
.
.

しかし、ベクトルには配列が格納されてsortおり、特定のインデックスに基づいてベクトルが必要です。つまり:

int arr[3];

vector<arr> v;

インデックス 0 または 1 または 2 (ユーザーの入力に応じて) に基づいて v を並べ替えたい場合、どのように並べ替え機能を使用できますか? ここでの問題は、比較関数を作成するときです。

bool compare(int *arr,int *arr1)

では、この関数に特定のインデックスに基づいてソートするように指示するにはどうすればよいでしょうか?

4

1 に答える 1

5

ファンクターオブジェクトを使用するだけです:

struct coord { int *arr; };
struct Comparer : std::binary_function<coord,coord,bool> {
    Comparer( int base ) : m_base( base ) {}
    bool operator()( const coord &c1, const coord &c1 ) 
    { 
        return c1.arr[m_base] < c2.arr[m_base]; 
    }
private:
    int m_base;
};
//...
std::sort( v.begin(), v.end(), Comparer( 1 ) );
于 2013-02-24T19:27:02.067 に答える