C++ C++;std::设置排序不适用于客户类*

C++ C++;std::设置排序不适用于客户类*,c++,stl,set,C++,Stl,Set,我正在使用一组指向自定义抽象类的指针: std::set<Item*>* Stuff; 接下来,我运行几行代码来确认对象a

我正在使用一组指向自定义抽象类的指针:

std::set<Item*>* Stuff;
接下来,我运行几行代码来确认对象a
if(*A==*B){std::cout每个人的评论都是正确的。当然,它工作正常,除了我对指针地址排序,而不是我真正想要的

一旦你们把我从死亡螺旋中拉出来,我就开始考虑定义我自己的比较器:

std::set<Item*, std::less<Item**>>* poo2 = new std::set<Item*, std::less<Item**>>();

std::less
适用于指针。打印指针,而不是指针指向的内容,然后查看。@juanchopanza:它看起来像是按指针地址排序的。对象的创建顺序看起来就是它们在集合中的结束方式,而不管插入顺序如何。[0]定期*0x100103c50 0x0000000103C50[1]定期*0x100103c80 0x0000000103C80正是这样。这就是它应该做的。你有一组指针,所以它会对指针进行排序。正常工作。现在来找出为什么我在尝试设置自己的比较器时出现编译器错误。也许你想按内容比较项目,但不是按指针比较?如果是的话,看看这个嗯……这正是我在评论中给你的:)
if(*A == *B) { std::cout << "*A == *B" << std::endl;}
if(*A < *B) { std::cout << "*A < *B" << std::endl;}
if(*A > *B) { std::cout << "*A > *B" << std::endl;}

//print in order from beginning to end
for (std::set<Item*>::iterator it=poo->begin(); it!=poo->end(); ++it) {

    std::cout << ' ' << **it << std::endl;
}
*A < *B
20140302 b
20140301 a
std::set<Item*, std::less<Item**>>* Periodicals2 = new std::set<Item*,   std::less<Item**>>();

Date bDate(20140302);
Periodical* B = new Periodical("b", bDate);

Date aDate(20140301);
Periodical* A = new Periodical("a", aDate);

Periodicals2->insert(B);
Periodicals2->insert(A);
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:1596:17: error: no matching function for call to object of type 'value_compare' (aka 'std::__1::less<Item **>')
std::set<Item*, std::less<Item**>>* poo2 = new std::set<Item*, std::less<Item**>>();
1596:17: error: no matching function for call to object of type 'value_compare' (aka 'std::__1::less<Item **>')
struct compare {
    bool operator()(const Item* lhs, const Item* rhs) const {

        return *lhs < *rhs;
    }
};
 20140301 a
 20140302 b