C ++将一个元素插入向量

时间:2017-05-19 10:15:12

标签: c++ algorithm c++11

我正在尝试使用存储每个元素的向量来构建优先级队列。首先,我想将元素插入到具有优先级的向量中。我不确定是否有可能,如果没有,有人可以给我另一个解决方案。 这是我的代码:

template <typename E>
class PriorityQueue {
private:
    std::vector<E> elements;
    E value;
    int pr; 

public:
  PriorityQueue() {}

  void insert(int priority, E element) {


  }   
};

2 个答案:

答案 0 :(得分:2)

执行此操作的标准算法(请参阅Introduction To Algorithms第6章)如下:

  1. 推动项目时,将其插入向量的末尾,然后将其“气泡”到正确的位置。

  2. 弹出最小的项目时,将第一项(位置0)替换为末尾的项目,然后将其“气泡”到正确的位置。

  3. 可以证明这可以通过(摊销的)对数时间来完成(摊销是由于向量可能会使自身加倍)。

    但是,没有必要自己实现,因为标准库包含std::priority_queue,它是使用std::vector作为其默认序列容器的容器适配器。例如,如果您定义

    std::priority_queue<int> q;
    

    然后q将成为适应向量的优先级队列。

答案 1 :(得分:2)

以下是如何为vector创建优先级元素:

 struct PriElement
    {
        int data;
        int pri;
        bool operator < ( const PriElement & other ) const
        {
            return pri < other.pri;
        }
    };

    vector<PriElement> _vector;

然而,真正的问题是保持向量按优先级排序。

这是一个天真的实现,显示了冒泡方法:

class PriorityQueue{

public:
    void insert( int data, int pri )
    {
        _vector.push_back(PriElement(data,pri));
        int index = _vector.size() -1;
        while ( ( index > 0 )&& (_vector[index] < _vector[index-1] ) )
        {
            swap(_vector[index],_vector[index-1]);
            index--;
        }

    }
private:

    vector<PriElement> _vector;
};

对于任何现实世界的实现,如上所述,请使用priority_queue。