我在一个类中有一个集合,我想为该集合定义一个新的顺序,但顺序取决于该类的属性。我该如何实施呢? 我试过这样的事情
class myclass{
int c;
set<int,cmp> myset;
struct cmp{
bool operator()(const unsint a, const unsint b)
const {
return (depends on c) ;
}
};
}
但它没有用。感谢任何帮助。谢谢。
编辑:问题是我不知道先验。它是我输入的值,然后它将始终是相同的。
答案 0 :(得分:0)
return (depends on c) ;
我认为使comapare函数依赖于c
并不是一个好主意,因为set
对象已经构建了树,std::set
不支持重建。< / p>
此外,请注意std::set
要求Comparator符合严格弱排序规则。
您可以在'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。