我如何存储和获取结构队列?

时间:2014-08-01 07:08:21

标签: c++ struct queue structure

如何将结构的值存储并获取到我有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);
}

4 个答案:

答案 0 :(得分:3)

您只需将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();

答案 1 :(得分:1)

如果您使用的是C ++,则可以使用pair<double, double>而不是手动创建队列。 这是如何声明并使用它:

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) );

答案 2 :(得分:0)

因为它是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<double, double>struct是好的,以防您有更多数据。

答案 3 :(得分:0)

如果您的编译器提供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);
}