2

カスタム クラス オブジェクトのベクトルをさまざまな属性で並べ替える関数を作成しようとしています。

C++ ソート リファレンスは次の場所にあります。

http://www.cplusplus.com/reference/algorithm/sort/

次のように並べ替えることができると言います:

std::sort (myvector.begin(), myvector.end(), myfunction);

私ができるようにしたいのは、次のように、ベクトルからの 2 つのオブジェクトに加えて、引数を myfunction に渡すことです。

std::sort (myvector.begin(), myvector.end(), myfunction(mode=7));

そうする方法を知っていますか?

これが簡単なPythonから来て、私はC ++に比較的慣れていません。

4

3 に答える 3

5

C++11 を使用している場合は、ラムダを使用できます。

sort(myvec.begin(), myvec.end(), [] (Type a, Type b) { return myfunction(a,b,7); });
于 2013-02-07T22:39:32.127 に答える
3

フリー関数の代わりにファンクターを使用できます。

struct Functor{
  int mode;
  bool operator() (int a,int b) { return (a<b);}
} functor;

()ファンクタが によって呼び出されると、オーバーロードされた演算子が実行されsortます。そこには変数があり、mode必要に応じて使用できます。次に、モードを設定し (ファンクター コンストラクターで設定することもできます)、sortそれを使用して呼び出します。

functor.mode = 7; // or set it in the constructor
std::sort (myvector.begin(), myvector.end(), functor);
于 2013-02-07T22:37:09.990 に答える
1

ファンクターを作成します。

struct MyFunction {
  bool operator()(const T& lhs, const T& rhs) const { /* implement logic here */ }
  int mode;
};

次に、プレーンな function の代わりにそのインスタンスを渡しますmyfunction。ここでTは、インスタンス化に使用される型std::vectorです。

MyFunction f;
f.mode = 7;
std::sort (myvector.begin(), myvector.end(), f);

C++11 をサポートしている場合は、ラムダ関数を使用できます。

std::sort(myvector.begin(), myvector.end(), [](const T&a, const T& b) { /* implement*/ });
于 2013-02-07T22:37:03.620 に答える