C++11 自定义比较类在std::set容器中指向用户定义类的指针时无法正常工作
我不明白为什么在这个代码示例中,std::set容器没有按照我所定义的比较类对实体进行排序。有人能帮我吗?谢谢C++11 自定义比较类在std::set容器中指向用户定义类的指针时无法正常工作,c++11,pointers,set,user-defined-types,custom-compare,C++11,Pointers,Set,User Defined Types,Custom Compare,我不明白为什么在这个代码示例中,std::set容器没有按照我所定义的比较类对实体进行排序。有人能帮我吗?谢谢 #include <iostream> #include <set> class Entity { public: int num; Entity(int num):num(num){} bool operator< (const Entity& _entity) const { return (this->num &
#include <iostream>
#include <set>
class Entity {
public:
int num;
Entity(int num):num(num){}
bool operator< (const Entity& _entity) const { return (this->num < _entity.num); }
};
struct my_cmp {
bool operator() (const Entity* lhs, const Entity* rhs) const { return (lhs < rhs); }
};
class EntityManager {
private:
std::set<Entity*, my_cmp> entities;
public:
void AddEntity(int num) { entities.insert(new Entity(num)); }
void ListAllEntities() const {
unsigned int i = 0;
for (auto& entity: entities) {
std::cout << "Entity[" << i << "]: num:" << entity->num << std::endl;
i++;
}
}
};
int main(void) {
EntityManager manager;
manager.AddEntity(2);
manager.AddEntity(1);
manager.AddEntity(4);
manager.AddEntity(3);
manager.ListAllEntities();
return 0;
}
#包括
#包括
类实体{
公众:
int-num;
实体(int num):num(num){}
布尔运算符<(const-Entity&_-Entity)const{return(this->num<_-Entity.num);}
};
结构我的cmp{
布尔运算符()(常量实体*lhs,常量实体*rhs)常量{return(lhs std::cout您需要取消对指针的引用*lhs<*rhs
。您只是在比较当前指针的值,因此您的顺序取决于它们在内存中的位置
#include <iostream>
#include <set>
class Entity {
public:
int num;
Entity(int num):num(num){}
bool operator< (const Entity& _entity) const { return (this->num < _entity.num); }
};
struct my_cmp {
bool operator() (const Entity* lhs, const Entity* rhs) const { return (*lhs < *rhs); }
};
class EntityManager {
private:
std::set<Entity*, my_cmp> entities;
public:
void AddEntity(int num) { entities.insert(new Entity(num)); }
void ListAllEntities() const {
unsigned int i = 0;
for (auto& entity: entities) {
std::cout << "Entity[" << i << "]: num:" << entity->num << std::endl;
i++;
}
}
};
int main(void) {
EntityManager manager;
manager.AddEntity(2);
manager.AddEntity(1);
manager.AddEntity(4);
manager.AddEntity(3);
manager.ListAllEntities();
return 0;
}
#包括
#包括
类实体{
公众:
int-num;
实体(int num):num(num){}
布尔运算符<(const-Entity&_-Entity)const{return(this->num<_-Entity.num);}
};
结构我的cmp{
布尔运算符()(常量实体*lhs,常量实体*rhs)常量{return(*lhs<*rhs);}
};
类实体管理器{
私人:
设置实体;
公众:
void AddEntity(int num){entities.insert(new Entity(num));}
void listalEntities()常量{
无符号整数i=0;
用于(自动和实体:实体){
标准::cout