2017-11-14 13 views
-1

私は "アルゴリズム第4版"(Sedgewick、ウェイン)を読んでいると、3ウェイパーティションクイックソートのために、それは、このC#のコードを使用していますこれと同等のコードがC++で何になるのでしょうか。 ありがとうございます。C#comparetTo()関数の同等

+1

のような人気のライブラリあなたはSTLとアルゴリズムにC++の本を読むべきで、C#コードを適応しようとしないパーティショニングなど、ソートのためのアルゴリズムであり構築されています。 C++ *アルゴリズム*は、任意のコンテナまたはストリーム(実際にはイテレータを提供できるもの)で動作する特定のクラス/関数です。 STL自体にソート、パーティショニングなどのためのアルゴリズムが組み込まれています –

+0

これらのアルゴリズムは、さまざまな種類の特定の動作を提供する「特性」を受け入れることができます。 [std :: sort](http://en.cppreference.com/w/cpp/algorithm/sort)を確認します。3番目のオーバーロードは 'std :: greater ()'のような比較関数またはオブジェクトを受け取ります –

答えて

0

int cmp = a < b ? -1 : a > b ? 1 : 0; 

または

int cmp = a < b ? -1 : a == b ? 0 : 1; 

のいくつかの変異体は、特定のタイプのために理にかなっているものをオペレータに依存します。

さらにMSDNCompareToの実装上の制約を定義:

オブジェクトA、B及びCについて

、以下が真でなければならない:

A.CompareTo(A)ゼロを返さなければなりません。
A.CompareTo(B)がゼロを返す場合、B.CompareTo(A)はゼロを返す必要があります。
A.CompareTo(B)の場合にはゼロを返し、B.CompareTo(C)をA.CompareTo(C)がゼロを返す必要があり、ゼロを返します。 A.CompareTo(B)は反対の符号の値を返す必要がゼロ以外の値、その後B.CompareTo(A)を返した場合

A.CompareTo(B)の値がゼロに等しくないxは戻り、B.CompareTo(C)はxと同じ符号の値yを返し、次いでA.CompareTo(C)が同じの値を返す必要がある場合xとyとして符号を付ける。

+0

STLはすでにこのために 'std :: greater'関数オブジェクトを持っています –

+0

@PanagiotisKanavos' std :: greater'は正確には 'CompareTo 'それは平等のためにテストしないので、答え(驚き)だけがもう一方より大きいかどうかです。しかし、これはC++でソートするのが望ましい方法だとは言いません。 – Rotem

+0

ソートのために、それが使用されています。 C++には既に、比較関数オブジェクトを期待する 'std :: sort'のようなアルゴリズムがあります。 C#と同等の機能はC++では役に立ちません。 PS:Therer's [std :: greater_equal](http://en.cppreference.com/w/cpp/utility/functional/greater_equal) –

-1

同等物は、std::greader関数オブジェクトの特殊化です。

std::sort例から撮影:

std::array<int, 10> s = {5, 7, 4, 2, 8, 6, 1, 9, 0, 3}; 

// sort using a standard library compare function object 
std::sort(s.begin(), s.end(), std::greater<int>()); 
for (auto a : s) { 
    std::cout << a << " "; 
} 
std::cout << '\n'; 

他の組み込み関数オブジェクト、例えばstd::greater_equalstd::lessstd::less_equalがあります。特定の順序付けを使用する新しい比較オブジェクトを作成することもできます。

あなたはSTLとアルゴリズムのC++本を読んだりする必要があり、C#のコードを適応しようとしません。 std::sortのようなC++アルゴリズムは、任意のコンテナまたはストリーム(実際にはイテレータを提供できるもの)で動作する特定のクラス/関数です。あなたがそれからbeginendイテレータを得ることができれば、ツリーをソートすることができます。

STL自体またはブースト