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

Posted

技术标签:

【中文标题】C ++为类中的集合定义顺序【英文标题】:C++ Define an order for a set inside a class 【发布时间】:2016-01-20 16:54:11 【问题描述】:

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

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

但它没有用。任何帮助表示赞赏,谢谢。

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

【问题讨论】:

你有minimal reproducible example吗? 【参考方案1】:

return (depends on c) ;

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

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

您可以在'Compare' documentation 和wikipedia 阅读更多内容

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

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

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

【讨论】:

很好的答案,谢谢!如果我不知道 c 先验的价值怎么办?我可以在获得值后(在它运行时)创建 struct cmp 吗?

以上是关于C ++为类中的集合定义顺序的主要内容,如果未能解决你的问题,请参考以下文章

将闭包定义为类中的方法

C++ 缓冲区 (buffer)

类中的特殊成员函数

类中的变量

java中的变量

C#-索引器