オブジェクトのc ++クイックソートベクトル

クリストファー・レオン

オブジェクトのベクトルでstd :: qsortを使用するのに問題があります。(このコードはループ内にあることに注意してください)

std::vector<s_GridData> info = GetAllAdjacentObjInfoFromMap(FLOOR_OBJ, e_Object::eObject_WIRE, itr.getPos());

//No wires adjacent!
if (info.size() == 0) {
  continue;
}

std::cout << "Before sorting: ";
std::cout << info;

std::qsort(&info, info.size(), sizeof(s_GridData),
  [](const void *lhs, const void *rhs)->int {
    s_GridData gridLhs = *reinterpret_cast<const s_GridData*>(lhs);
    s_GridData gridRhs = *reinterpret_cast<const s_GridData*>(rhs);
    if (gridLhs.groupID < gridRhs.groupID) return -1;
    if (gridRhs.groupID < gridLhs.groupID) return 1;
    return 0;
  }
);

std::cout << "After sorting: ";
std::cout << info;

ここで特にクイックソートコードでは、クイックソートが私のを消去しているようinfoです。ラムダに何か問題がありますか?または、代入演算子のオーバーロードのようにqsortを使用するための別の要件がありますか。ただし、これs_GridDataは単に整数値の構造体です。

前もって感謝します。

ジョン・ズウィンク

間違った引数をに渡していますqsort()(これは実際には元々含まれていないC関数ですnamespace std):

std::qsort(&info, ...

それinfo間違っstd::vectorqsort()ますが、Cスタイルの配列必要です。あなたはそれをこのように修正することができます:

std::qsort(info.data(), ...

またはC ++ 11より前:

std::qsort(&info[0], ...

ただし、より良い解決策は、を使用することですstd::sort()。これは、型の安全性やその他の利点を提供する真正なC ++関数です。これは次のようになります。

sort(info.begin(), info.end(),
    [](const s_GridData& lhs, const s_GridData& rhs)->bool {
        return gridLhs.groupID < gridRhs.groupID;
    });

ご覧のとおり、C ++の方法はより簡潔であり、順序がすべてのインスタンスに適用できる場合は、個別に(通常はインラインフリー関数として)定義できます。この場合、次のようになります。

sort(info.begin(), info.end());

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オブジェクト作成エラーのC ++ベクトル

分類Dev

プライベートオブジェクトのモック

分類Dev

クリックイベントのngForオブジェクト

分類Dev

オブジェクトへのポインタのベクトルに適用されるクイックソート-無限ループ

分類Dev

オブジェクトのC ++ GetNameベクトル

分類Dev

オブジェクトの配列をクイックソートする

分類Dev

C ++-オブジェクトのベクトルをシャッフルする

分類Dev

オブジェクトへのポインタのベクトルc ++

分類Dev

C ++ベクトルオブジェクトアクセス

分類Dev

C++: クラス オブジェクトのベクトルの作成

分類Dev

C ++のオブジェクトの動的配列でのバブルソート

分類Dev

Angular / TypeScriptのクリックイベントを介してオブジェクトをループする方法

分類Dev

プライベートメソッドへの再帰的なオブジェクトアクセス

分類Dev

オブジェクトポインタのグローバルベクトルのエラーc ++

分類Dev

Rails、モジュールメソッドのモックオブジェクト

分類Dev

ベクトルC ++内のオブジェクトへのポインターの検査

分類Dev

クラスオブジェクトへのポインタのベクトル

分類Dev

トレイトに属するオブジェクトのベクトル

分類Dev

C ++の基本クラスタイプ2dベクトルのサブクラスオブジェクトをプッシュバックします

分類Dev

イベントソーシングの値オブジェクト

分類Dev

ベクトルのオブジェクト属性によるマージソート

分類Dev

Cでのオブジェクト指向

分類Dev

C#-オブジェクトの作成

分類Dev

C#のJavascriptオブジェクト

分類Dev

C ++の動的オブジェクト

分類Dev

C ++の一時オブジェクト

分類Dev

C ++-神オブジェクトの作成

分類Dev

オブジェクトC ++の配列

分類Dev

C ++でのオブジェクト宣言

Related 関連記事

  1. 1

    オブジェクト作成エラーのC ++ベクトル

  2. 2

    プライベートオブジェクトのモック

  3. 3

    クリックイベントのngForオブジェクト

  4. 4

    オブジェクトへのポインタのベクトルに適用されるクイックソート-無限ループ

  5. 5

    オブジェクトのC ++ GetNameベクトル

  6. 6

    オブジェクトの配列をクイックソートする

  7. 7

    C ++-オブジェクトのベクトルをシャッフルする

  8. 8

    オブジェクトへのポインタのベクトルc ++

  9. 9

    C ++ベクトルオブジェクトアクセス

  10. 10

    C++: クラス オブジェクトのベクトルの作成

  11. 11

    C ++のオブジェクトの動的配列でのバブルソート

  12. 12

    Angular / TypeScriptのクリックイベントを介してオブジェクトをループする方法

  13. 13

    プライベートメソッドへの再帰的なオブジェクトアクセス

  14. 14

    オブジェクトポインタのグローバルベクトルのエラーc ++

  15. 15

    Rails、モジュールメソッドのモックオブジェクト

  16. 16

    ベクトルC ++内のオブジェクトへのポインターの検査

  17. 17

    クラスオブジェクトへのポインタのベクトル

  18. 18

    トレイトに属するオブジェクトのベクトル

  19. 19

    C ++の基本クラスタイプ2dベクトルのサブクラスオブジェクトをプッシュバックします

  20. 20

    イベントソーシングの値オブジェクト

  21. 21

    ベクトルのオブジェクト属性によるマージソート

  22. 22

    Cでのオブジェクト指向

  23. 23

    C#-オブジェクトの作成

  24. 24

    C#のJavascriptオブジェクト

  25. 25

    C ++の動的オブジェクト

  26. 26

    C ++の一時オブジェクト

  27. 27

    C ++-神オブジェクトの作成

  28. 28

    オブジェクトC ++の配列

  29. 29

    C ++でのオブジェクト宣言

ホットタグ

アーカイブ