嗯,我的問題是,我使用的std ::使用自定義設置比較,像:C++的std ::設置自定義比較
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);
但是,當然,它節選A *不是短整型。
所以,我知道我可以使用std :: find_if,但不會渲染無用的自定義比較器?它會遍歷整個列表,不是嗎?有沒有什麼辦法可以使用hashCode而不是對象本身來查找?
謝謝!
如何使用std :: find_if與比較器(調整爲相等)? – stardust 2013-05-02 12:03:16
對不起,這就是我寫'std :: find'時的意思,應該是'std :: find_if'。它不會迭代整個列表,並且根本不優化搜索嗎?我使用'std :: set'的原因是它的O(log(n))搜索成本。 – Guillem 2013-05-02 12:05:27