マップキーとしてのc ++構造体と演算子のオーバーロード

leaf26:

マップまたはセットの2D座標を追跡しようとしています。

次のコードの結果、このエラーが発生します。エラーC2678:バイナリ '<':タイプ 'const _Ty'の左側のオペランドをとる演算子が見つかりません(または許容できる変換がありません)

struct Coord_T {
    uint64_t x, y;
    inline bool operator==(const Coord_T& o) { return x == o.x && y == o.y; }
    inline bool operator<(const Coord_T& o) { return x < o.x || (x == o.x && y < o.y); }
    inline bool operator>(const Coord_T& o) { return x > o.x || (x == o.x && y > o.y); }
    inline bool operator!=(const Coord_T& o) { return x != o.x || y != o.y; }
    inline bool operator<=(const Coord_T& o) { return x < o.x || (x == o.x && y <= o.y); }
    inline bool operator>=(const Coord_T& o) { return x > o.x || (x == o.x && y >= o.y); }
};

int main()
{
    Coord_T coord;
    coord.x = 5;
    coord.y = 6;
    std::map<Coord_T, bool> vals;
    vals[coord] = true;
    return 0;
}

構造体に必要なすべての演算子を追加したと思うので、これを機能させるために他に何ができますか?

アリ・アスカリ:

const関数としての演算子のオーバーロード:

#include <iostream>
#include <map>



struct Coord_T {
    uint64_t x, y; 
    inline bool operator==(const Coord_T& o) const { return x == o.x && y == o.y; }
    inline bool operator<(const Coord_T& o) const { return x < o.x || (x == o.x && y < o.y); }
    inline bool operator>(const Coord_T& o) const { return x > o.x || (x == o.x && y > o.y); }
    inline bool operator!=(const Coord_T& o) const { return x != o.x || y != o.y; }
    inline bool operator<=(const Coord_T& o) const { return x < o.x || (x == o.x && y <= o.y); }
    inline bool operator>=(const Coord_T& o) const { return x > o.x || (x == o.x && y >= o.y); }

};


int main()
{
    Coord_T coord;
    coord.x = 5; 
    coord.y = 6; 
    std::map<Coord_T, bool> vals;
    vals[coord] = true;
    return 0; 
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

構造体の演算子のオーバーロード

分類Dev

テンプレート構造体のオーバーロード演算子

分類Dev

C構造体をオーバーロードする演算子

分類Dev

<<演算子のオーバーロード:構造体のベクトルを使用した構造体

分類Dev

構造体演算子のオーバーロードを宣言する場所

分類Dev

マップを使用した構造体のostream演算子のオーバーロード

分類Dev

C ++の古い構造体演算子のオーバーロード構文が変更されましたか?

分類Dev

非型テンプレート構造体のメンバー構造体のコピー代入演算子をオーバーロードします

分類Dev

構造体/クラスラッパーのC ++オーバーロード自動演算子

分類Dev

テンプレート呼び出し演算子と汎用ラムダを使用した構造体のオーバーロード-gccvs clang

分類Dev

std :: coutは、構造体のオーバーロードされた '<<'演算子では機能しません

分類Dev

構造体の二項<<演算子をオーバーライドする

分類Dev

構造体内の配列と演算子のオーバーロード、c ++からc#?

分類Dev

この演算子のオーバーロードを構造体と同じ名前空間に配置できないのはなぜですか?

分類Dev

別の構造体内の構造体の演算子のオーバーロードはエラーを引き起こします

分類Dev

演算子のオーバーロードがある構造体でnullからの暗黙的な変換を抑制することは可能ですか?

分類Dev

テンプレート化された構造体の<<演算子をオーバーライドする

分類Dev

オーバーロード=演算子、文字列ポインタを持つ構造体

分類Dev

どのように適切にCでのセットでの使用を可能にする構造体で<演算子をオーバーロードする++

分類Dev

構造体演算子をオーバーロードすると、doubleを乗算すると精度が低下します

分類Dev

Goマップのキーとしての構造体

分類Dev

C ++でのintとcharのオーバーロード演算子

分類Dev

構造体のC ++オーバーロードoperator()

分類Dev

匿名の構造体メンバーとしてマップ

分類Dev

演算子のオーバーロード->

分類Dev

演算子のオーバーロード?

分類Dev

演算子のオーバーロード

分類Dev

()演算子のオーバーロード

分類Dev

演算子のオーバーロード=

Related 関連記事

  1. 1

    構造体の演算子のオーバーロード

  2. 2

    テンプレート構造体のオーバーロード演算子

  3. 3

    C構造体をオーバーロードする演算子

  4. 4

    <<演算子のオーバーロード:構造体のベクトルを使用した構造体

  5. 5

    構造体演算子のオーバーロードを宣言する場所

  6. 6

    マップを使用した構造体のostream演算子のオーバーロード

  7. 7

    C ++の古い構造体演算子のオーバーロード構文が変更されましたか?

  8. 8

    非型テンプレート構造体のメンバー構造体のコピー代入演算子をオーバーロードします

  9. 9

    構造体/クラスラッパーのC ++オーバーロード自動演算子

  10. 10

    テンプレート呼び出し演算子と汎用ラムダを使用した構造体のオーバーロード-gccvs clang

  11. 11

    std :: coutは、構造体のオーバーロードされた '<<'演算子では機能しません

  12. 12

    構造体の二項<<演算子をオーバーライドする

  13. 13

    構造体内の配列と演算子のオーバーロード、c ++からc#?

  14. 14

    この演算子のオーバーロードを構造体と同じ名前空間に配置できないのはなぜですか?

  15. 15

    別の構造体内の構造体の演算子のオーバーロードはエラーを引き起こします

  16. 16

    演算子のオーバーロードがある構造体でnullからの暗黙的な変換を抑制することは可能ですか?

  17. 17

    テンプレート化された構造体の<<演算子をオーバーライドする

  18. 18

    オーバーロード=演算子、文字列ポインタを持つ構造体

  19. 19

    どのように適切にCでのセットでの使用を可能にする構造体で<演算子をオーバーロードする++

  20. 20

    構造体演算子をオーバーロードすると、doubleを乗算すると精度が低下します

  21. 21

    Goマップのキーとしての構造体

  22. 22

    C ++でのintとcharのオーバーロード演算子

  23. 23

    構造体のC ++オーバーロードoperator()

  24. 24

    匿名の構造体メンバーとしてマップ

  25. 25

    演算子のオーバーロード->

  26. 26

    演算子のオーバーロード?

  27. 27

    演算子のオーバーロード

  28. 28

    ()演算子のオーバーロード

  29. 29

    演算子のオーバーロード=

ホットタグ

アーカイブ