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

时间:2016-01-20 16:54:11

标签: c++ class struct set

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

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

但它没有用。感谢任何帮助。谢谢。

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

1 个答案:

答案 0 :(得分:0)

  

return (depends on c) ;

我认为使comapare函数依赖于c并不是一个好主意,因为set对象已经构建了树,std::set不支持重建。< / p>

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

您可以在'Compare' documentationwikipedia

阅读更多内容

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

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

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