C++ stl c++;:集中上课

C++ stl c++;:集中上课,c++,class,stl,set,C++,Class,Stl,Set,我能把一节课放在一组里吗?如本例所示,插入(a) 类arco{ 公众: arco(整数x0、整数y0、整数z0、整数x1、整数y1、整数z1); 私人: std::载体a; std::载体b; std::set顶点; }; arcos类{ 公众: arcos(); 无效setArco(arco a); 私人: std::设置todos; }; arco::arco(整数x0、整数y0、整数z0、整数x1、整数y1、整数z1){ std::载体a(3); std::载体b(3); a[0]

我能把一节课放在一组里吗?如本例所示,插入(a)

类arco{
公众:
arco(整数x0、整数y0、整数z0、整数x1、整数y1、整数z1);
私人:
std::载体a;
std::载体b;
std::set顶点;
};  
arcos类{
公众:
arcos();
无效setArco(arco a);
私人:
std::设置todos;
};  
arco::arco(整数x0、整数y0、整数z0、整数x1、整数y1、整数z1){
std::载体a(3);
std::载体b(3);
a[0]=x0;
a[1]=y0;
a[2]=z0;
b[0]=x1;
b[1]=y1;
b[2]=z1;
顶点。插入(a);
顶点。插入(b);
}   
void arcos::setArco(arcoa){
todos.插入(a);
}   

当然,只需重载
运算符您需要为您的类型定义严格的弱排序,以便在其上实例化
集。它可以是
运算符
类集合;
Key
是您的类型,
Traits
应该是您的比较函数,或者如果您定义了
operatorYes,则需要注意

对于所有STL容器,包含的对象必须是:

  • 复制可构造。您可以通过提供副本构造函数来实现这一点
  • 可转让的。您可以通过赋值运算符
    operator=(const MyObject&)来实现这一点。
此外,对于关联容器,包含的对象必须是严格弱可比的。集合本身使用
less
定义此比较的默认实现,但如果愿意,您可以定义自己的实现


您通常会使用默认的
less
比较。执行此操作时,必须提供
bool运算符这里的问题是什么?这还不完全清楚。@Mark:我只是简单地问了一个问题,“我可以把一个类放在一个集合中吗?”@John:是的,我希望有更具体的东西,因为这看起来太笼统了:)是的,我想他想把
todos
作为一个私人成员,而不是把它放进去constructor@Gene-事实上,这是私人的,构造器中的这个会给成员带来阴影,我想如果我把bool arco::operator@JuanPablo-是的,这是正常的,因为“hidden”
这个参数<代码>操作您也可以为您的类专门化更少的代码。
  class arco {
     public:
        arco(int x0, int y0, int z0, int x1, int y1, int z1);
     private:
        std::vector<int> a;
        std::vector<int> b;
        std::set< std::vector<int> > vertices;
  };  
  class arcos {
     public:
        arcos();
        void setArco(arco a); 
     private:
        std::set<arco> todos; 
  };  


  arco::arco(int x0, int y0, int z0, int x1, int y1, int z1){
     std::vector<int> a(3);
     std::vector<int> b(3);
     a[0]=x0;
     a[1]=y0;
     a[2]=z0;
     b[0]=x1;
     b[1]=y1;
     b[2]=z1;
     vertices.insert(a);
     vertices.insert(b);
  }   
  void arcos::setArco(arco a){ 
     todos.insert(a);
  }   
struct compare_arcos
{
  bool operator()( const arco& a1, const arco& a2 ) const
  {
    //..
  }
};

  bool operator<( const arco& a1, const arco& a2 ) const
  {
    //..
  }
template <
   class Key, 
   class Traits=less<Key>, 
   class Allocator=allocator<Key> 
>
class set;