【问题标题】:how do i store and get a queue of structure?我如何存储和获取结构队列?
【发布时间】:2014-08-01 07:08:21
【问题描述】:

如何将结构的值存储和获取到我有 2 个值的队列中?我想将这几个值排队。

| 4 , 2 |

| 3、5 |

其中 4,2 和 3,5 可以是变量,例如

primaryQ.push(a, b);

我的结构:

struct primarytemp{
    double process;
    double secondary;
};

以下是我声明我的主要内容的方式:

int main(){
    queue<primarytemp> primaryQ;
    primaryQ.push(4, 2);
}

【问题讨论】:

    标签: c++ struct queue structure


    【解决方案1】:

    您可以将primarytemp 对象推入队列,无需修改类型:

    queue<primarytemp> q;
    
    q.push(primarytemp{4., 2.});  // Requires current C++ standard (C++11)
    
    primarytemp p = {3., 5.};
    q.push(p);                    // Also  works pre-C++11
    

    正如其他人所提到的,您可以将构造函数添加到primarytemp,尽管这意味着它不再是聚合。这可能很重要,也可能无关紧要。

    primarytemp
    {
      primarytemp() : process(), secondary() {}
      primarytemp(double process, double secondary) 
      : process(process), secondary(secondary) {}
    
      double process;
      double secondary; 
    };
    

    这可以让你说

    q.push(primarytemp(4., 2.)); // Also works pre-C++11
    

    要访问您刚刚推送的元素,请使用back() 方法,该方法返回引用:

    std::cout << "process" << q.back().process() << std::endl;
    

    您也可以复制该元素:

    primarytemp = q.back();
    

    front() 方法允许您对队列中的第一个元素执行相同的操作。

    移除前面的元素:

    q.pop();
    

    【讨论】:

      【解决方案2】:

      如果您使用 C++,您可以使用 pair&lt;double, double&gt; 而不是手动创建队列。 这是如何声明和使用它:

      queue< pair<double, double> > primaryQ;
      pair<double, double> myPair;
      myPair = make_pair(3, 5);
      
      cout << myPair.first;//will print 3, the first element of the couple
      cout << mtPair.second//will print 5, the second element of the couple
      
      primaryQ.push(myPair);//push the pair into the queue
      

      你也可以这样插入:

      primaryQ.push( make_pair(3, 5) );
      

      【讨论】:

      • struct 是比pair 更好的选择,因为后者您可能想要添加第三个值。
      • 这并不能解决问题(并不是说很容易知道问题所在。)
      【解决方案3】:

      因为它是 C++ struct 有构造函数,所以你可以:

      struct primarytemp
      {
          primarytemp(double p, double s) : process(p), secondary(s)
          {}
      
          double process;
          double secondary;
      };
      

      还有:

      int main(){
          queue<primarytemp> primaryQ;
          primaryQ.push(primarytemp(4, 2));
      }
      

      另外,如果你只有两个值,你可以使用pair&lt;double, double&gt;struct 在你有更多数据的情况下很好。

      【讨论】:

        【解决方案4】:

        如果您的编译器提供 C++11 功能,您可以使用 std::queue::emplace(...) 方法。 Emplace() 允许您通过将其参数列表直接转发到队列类型的构造函数来创建队列元素。见以下代码:

        struct primarytemp
        {
            double process;
            double secondary;
        
            primarytemp(double aProcess, double aSecondary) 
                : process(aProcess), secondary(aSecondary) {}
        };
        
        int main()
        {
            queue<primarytemp> primaryQ;
            primaryQ.emplace(4.0, 2.0);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-08-28
          • 1970-01-01
          • 1970-01-01
          • 2015-03-22
          • 2011-02-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多