さて、私の問題は、次のようなカスタムコンパレータで std::set を使用していることです。
class A
{
public:
A(int x, int y):
_x(x), _y(y)
{
}
int hashCode(){ return (_y << 16) | _x; }
private:
short int _y;
short int _x;
};
struct comp
{
bool operator() (A* g1, A* g2) const
{
return g1->hashCode() < g2->hashCode();
}
};
だから、私はそれを次のように使用します
std::set<A*, comp> myset;
// Insert some data
A* a = new A(2,1);
A* b = new A(1,3);
myset.insert(a);
myset.insert(b);
今私の問題は、私がこれをしたいということです:
myset.find( (2 << 16) | 1 );
ただし、もちろん、short int ではなく A* を除きます。
したがって、std::find_if を使用できることはわかっていますが、カスタム コンパレータが役に立たなくなるのではないでしょうか? リスト全体を反復しますよね?オブジェクト自体ではなく、hashCode で find を使用できる方法はありますか?
ありがとうございました!