2016-01-20 60 views
0

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

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

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

编辑:问题是,我不知道先验。这是我在输入中获得的一个价值,然后它总是一样的。

+1

你有[mcve]吗? – NathanOliver

回答

0

return (depends on c) ;

我认为这不是好主意,以comapare功能依赖于c,因为你set对象已经建成的树和不重建被std::set支持。

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

你可以阅读'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

+0

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