0

std::sort アルゴリズムについて質問があります。ここに私のテストコードがあります:

struct MyTest
{
    int m_first;
    int m_second;

    MyTest(int first = 0, int second = 0) : m_first(first), m_second(second)
    {
    }
};


int main(int argc,char *argv[])
{
    std::vector<MyTest> myVec;
    for(int i = 0; i < 10; ++i)
    {
        myVec.push_back(MyTest(i, i + 1));
    }


    //Sort the vector in descending order on m_first without using stand alone function or functors


    return 0;

}  

m_firstスタンドアロンの関数やファンクターを使用せずに変数のベクトルをソートすることは可能ですか? また、ブーストを使用していないことに注意してください。

4

6 に答える 6

10

operator <はい、並べ替える範囲の値の型が「厳密な弱い順序付け」を定義している限り、つまり、2 つのMyTestインスタンスを正しく比較するために使用できます。あなたは次のようなことをするかもしれません:

class MyTest
{
  ...
  bool operator <(const MyTest &rhs) const
  {
    return m_first<rhs.m_first;
  }
};
于 2009-06-01T07:52:25.357 に答える
3

構造体の operator< を記述します。これは sort で使用されるデフォルトの関数であり、カスタム データ構造で機能させる最も簡単な方法です。

于 2009-06-01T07:51:01.490 に答える
2

メンバー関数でそれを行うことは可能ですが、スタンドアロン関数が道です。

bool operator <(const MyTest &lhs, const MyTest &rhs)
{
    return lhs.m_first<rhs.m_first;
}

どうして ..

Scott Meyers:非メンバー関数がカプセル化を改善する方法

メンバーまたは非フレンド非メンバーとして実装できる関数を作成している場合は、非メンバー関数として実装することをお勧めします。その決定により、クラスのカプセル化が増加します。カプセル化を考えるときは、非メンバー関数を考えるべきです。

驚いた?読む

于 2009-06-01T08:57:31.437 に答える
2

演算子を定義する <

struct MyTest
{
...
    bool operator<(const MyTest& a_test) const {
        return m_first < a_test.m_first;
    }
};
于 2009-06-01T07:51:49.087 に答える
1

operator<inを定義する必要があり、次のMyTestようになります。

bool operator<(const MyTest &other) const {
  return m_first < other.m_first;
};
于 2009-06-01T07:56:02.590 に答える
-2

http://ideone.com/3QLtP

これは演算子 < を定義していませんが、ファンクタを定義しています。

しかし、時間や編集プロセスを旅するのは楽しいものです。

于 2011-08-28T10:40:23.083 に答える