저는 C++ STL 힙 알고리즘을 사용하고 있습니다. 다른 것들을 할 수 있도록 랩퍼 클래스를 작성했습니다. 내가 예를 들어, 아래의 코드를 사용하려고 할 때 :속도 차이 : 별도의 펑터 VS 연산자() * this가있는 큰 클래스 내부
struct HeapSort{
public:
HeapSort(Vector &phi) : _phi(phi) {}
bool operator()(unsigned p1, unsigned p2) {return fabs(_phi(p1)) > fabs(_phi(p2)); }
private:
Vector &_phi;
};
class FMMHeap{
public:
FMMHeap(Vector &phi) : cmp(phi) {}
inline void pop(){ pop_heap(_heap.begin(),_heap.end(),cmp); _heap.pop_back(); }
[...lots of other stuff...]
vectorU32 _heap;
HeapSort cmp;
}
나는이 왜 확실하지 않다 :
//! Min-heap wrapper class.
class FMMHeap{
public:
FMMHeap(Vector &phi) : _phi(phi) {}
bool operator()(unsigned p1, unsigned p2) {return fabs(_phi(p1)) > fabs(_phi(p2)); }
inline void pop(){ pop_heap(_heap.begin(),_heap.end(),*this); _heap.pop_back(); }
[...lots of other stuff...]
vectorU32 _heap;
Vector &_phi;
}
그것은이 같은 별도의 함수 객체를했을 때보다 더 wayyyyy 느렸다. 클래스에 많은 데이터가 있기 때문에 속도 저하가 * 여기에서 오는 것입니까? 이상하게 보입니다. 아니면 함수 객체가 사용되는 것과 관련이 있습니까?
operator()를 const로 설정해야합니다. 술어에는 부작용이 없을 것으로 예상됩니다. – sellibitze