C++で構造体のセットを作成する方法 質問する

C++で構造体のセットを作成する方法 質問する

一意のキーを持つ構造体があります。これらの構造体のインスタンスをセットに挿入したいと思います。これを行うには、挿入を行うためにセットが比較を行えるように、< 演算子をオーバーロードする必要があることはわかっています。

以下は機能しません:

#include <iostream>
#include <set>
using namespace std;
struct foo 
{
      int key;
};

bool operator<(const foo& lhs, const foo& rhs)
{
      return lhs.key < rhs.key;
}

set<foo> bar;

int main()
{
    foo *test = new foo;
    test->key = 0;
    bar.insert(test);
}

ベストアンサー1

これが役に立つかもしれません:

struct foo
{
  int key;
};

inline bool operator<(const foo& lhs, const foo& rhs)
{
  return lhs.key < rhs.key;
}

operator<()名前空間を使用している場合は、同じ名前空間で関数を宣言することをお勧めします。


編集後の完全性を保つために、他の人が指摘したように、foo*a が予想される場所にa を追加しようとしていますfoo

本当にポインターを扱いたい場合は、 をfoo*スマート ポインター クラス ( auto_ptrshared_ptr、 ...) にラップすることができます。

ただし、どちらの場合も、ではなく にoperator<作用するオーバーロードの利点が失われることに注意してください。foofoo*

おすすめ記事