一意のキーを持つ構造体があります。これらの構造体のインスタンスをセットに挿入したいと思います。これを行うには、挿入を行うためにセットが比較を行えるように、< 演算子をオーバーロードする必要があることはわかっています。
以下は機能しません:
#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_ptr
、shared_ptr
、 ...) にラップすることができます。
ただし、どちらの場合も、ではなく にoperator<
作用するオーバーロードの利点が失われることに注意してください。foo
foo*