在C ++中使用priority_queue

时间:2015-09-29 23:31:33

标签: c++ priority-queue

我试图写一个简单的函数,返回时间等待到达停车场门口的汽车。我为此目的使用了priority_queue,而我的代码似乎没有编译。

这是功能

std::time_t waitingTime(std::vector<car* > v){
    //std::unordered_map<std::time_t, std::string> lookup;
    std::vector<std::time_t> timeVector;
    std::priority_queue<std::time_t, timeVector, std::greater<std::time_t>> Q;

    for(auto it = v.begin(); it != v.end(); it++){
        car* c = *it;
        timeVector.push_back(c->exit);
        //lookup[c->exit] = c->id;
    }
    for(std::time_t t :timeVector){
        Q.push(t);
    }

    const std::time_t t = Q.top();
    Q.pop();
    return t;
};

这是我的驱动程序代码

std::time_t now = time(0);

    car* c1 = new car("A", now+2, now+4);
    car* c2 = new car("A", now, now+3);
    car* c3 = new car("A", now, now+1);

    std::vector<car* > v;
    v.push_back(c1);
    v.push_back(c2);
    v.push_back(c3);

    std::time_t t = waitingTime(v);
    std::cout<<t<<std::endl;

这是编译错误。

38: error: template argument for template type parameter must be a type
    std::priority_queue<std::time_t, timeVector, std::greater<std::time_t>> Q;

1 个答案:

答案 0 :(得分:0)

您需要提供类型作为模板的参数,而不是对象。您的队列声明应如下所示:

std::priority_queue<std::time_t> queue;

注意,我没有指定其他模板参数 - 默认正是我需要的。