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 ++为类中的集合定义顺序的主要内容,如果未能解决你的问题,请参考以下文章