更改 std::set 作为成员属性的顺序

Change the order of a std::set as a member attribute

本文关键字:属性 成员 顺序 std set 更改      更新时间:2023-10-16

>我正在尝试更改特定配置中集合的顺序:

自定义对象具有以下形式

class CustomObject{
public:
...
std::set<CustomObject*> container;
};

我想永久保留该属性,告知容器按以下顺序排序:

elt1elt2是容器的元素,和 elt1 < elt2 iff elt1.container.size()<elt2.container.size()

我知道我必须使用

struct cmpStruct {
    bool operator() (int const & lhs, int const & rhs) const
  {
    return lhs > rhs;
  }
};

如前所述,std::set 迭代顺序是否总是根据C++规范升序?

但是我不知道该怎么做才能访问结构内的"这个">

非常感谢您的帮助

类似的东西?

class CustomObject{
public:
    CustomObject(int _x) : x(_x) {};
    int x;
};
struct cmpStruct {
    bool operator() (const CustomObject*  lhs, const CustomObject*  rhs) const
    {
        return lhs->x > rhs->x;
    }
};
int main(int argc, char* argv[])
{
    std::set<CustomObject*, cmpStruct> container;
    CustomObject a(10);
    CustomObject b(20);
    CustomObject c(5);
    container.insert(&a);
    container.insert(&b);
    container.insert(&c);
    for(auto co : container) {
        std::cout << co->x << std::endl;
    }
    return 0;
}

输出:

20
10
5