C++ 为类中的集合定义顺序

C++ Define an order for a set inside a class

本文关键字:集合 定义 顺序 C++      更新时间:2023-10-16

我在类中有一个集合,我想为该集合定义一个新顺序,但顺序取决于类的属性。我应该如何实现它?我尝试过这样的事情

class myclass{
    int c;
    set<int,cmp> myset;
    struct cmp{
        bool operator()(const unsint a, const unsint b)
        const {
            return (depends on c) ;
            }
    };
}

但它没有用。任何帮助不胜感激,谢谢。

编辑:问题是我不知道c先验。这是我在输入中得到的值,然后它将始终相同。

return (depends on c) ;

我认为让comapare函数依赖于c不是好主意,因为您的set对象已经构建树并且std::set不支持重建。

此外,请注意,std::set要求比较器符合严格的弱排序规则

您可以在"比较"文档和维基百科中阅读更多信息

至于您的问题,您可以使用另一个比较函数创建另一个集合,然后在此处复制内容。

typedef std::set<int, cmp2> anotherSet;
std::copy(std::begin(firstSet), std::end(firstSet), std::inserter(anotherSet));

但是,如果您必须根据某些参数对其进行重新排序,看起来您实际上不需要std::set。考虑使用其他数据结构,如向量或列表。此外,如果需要 ~O(log N) 访问复杂性,则可以将数据组织到向量中堆。