使用C ++中的成员整数Id标识类对象

时间:2016-11-30 04:26:01

标签: c++ class vector stl

查看下面给出的三个类及其数据成员。

节点类

 class node
 {
     int node_id;
     double x,y,z;

 }

元素类

 class element
 {
      int element_id;
      node node1,node2,node3;
 }

网格类

 class mesh
 {
      /* I know that instead of pointer object we've to use smart pointer
         in the vector  but don't know how to use it.Any help is 
         appreciated. */

      std::vector<node*> nodes; // stores node objects.
      std::vector<element*> elements; //store element objects;
 }

因此,我可以轻松地实例化节点对象,并可以存储在std :: vector数据类型的节点中。但是我需要准确地知道元素中有哪些节点对象来实例化元素的对象。节点对象存储在向量数组中。在我的情况下识别像节点[i]这样的节点对象是容易出错的(即nodes [i]不是确切的第i个节点,其中i是node-id)。所以我想基于它的id来识别节点对象。请给我建议。

我希望我的问题有道理。由于我是c ++的初学者,所以任何编辑也都可以理解为可以理解。

1 个答案:

答案 0 :(得分:2)

我不确定天气这究竟是你的问题所在,但为getter提供了一个id,然后检查它可能会如下所示:

 class node
 {
     int node_id;
     double x,y,z;
 public:
     int getId(){ return node_id;}
 }

对于mesh类中的智能指针,您可以使用

 class mesh
 {
      std::vector<std::unique_ptr<node>> nodes; // stores node objects.
      std::vector<std::unique_ptr<element>> elements; //store element objects;
      void test()
      {
         for(const auto& n : nodes)
         {
            if(n->getId() == /*what you want*/)
            {
                 //emplace/push_back in elements
            }
      }
}

for e.g.