C ++将元素插入向量
Posted
技术标签:
【中文标题】C ++将元素插入向量【英文标题】:C++ insert an element to a vector 【发布时间】:2017-05-19 10:15:12 【问题描述】:我正在尝试使用存储每个元素的向量来构建优先级队列。首先,我想将元素插入到具有优先级的向量中。我不确定是否有可能,如果没有,有人可以给我另一种解决方案。 这是我的代码:
template <typename E>
class PriorityQueue
private:
std::vector<E> elements;
E value;
int pr;
public:
PriorityQueue()
void insert(int priority, E element)
;
【问题讨论】:
使用 std::priority_queue 没有魔法。根据要插入的优先级搜索位置,然后插入。 @PriyeshKumar 这具有线性复杂性,可以对数(摊销)完成。 我建议也看看 std::push_heap 和 std::pop_heap 【参考方案1】:这里是如何为向量创建一个具有优先级的元素:
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。
【讨论】:
感谢您的解决方案,非常感谢。如果可能的话,我可以使用 min-heap 来插入吗,这意味着我必须在插入之前对其进行 heapify。我不确定我的想法是否有意义 这就是上面的代码所做的,heapify up,但是对于一个向量。 Heapify 通常指的是应用于 BST 的相同进程(顺便说一下,priority_queue 是什么。)operator <
应该是const
【参考方案2】:
执行此操作的标准算法(参见Introduction To Algorithms 第 6 章)如下:
当推动一个项目时,将它插入到向量的末尾,然后将它“冒泡”到正确的位置。
当弹出最小的项目时,将第一个项目(位置 0)替换为最后的项目,然后将其“冒泡”到正确的位置。
有可能表明这可以用(摊销的)对数时间来完成(摊销是由于向量本身可能加倍)。
但是,没有必要自己实现,因为标准库包含std::priority_queue
,这是一个使用std::vector
作为其默认序列容器的容器适配器。例如,如果您定义
std::priority_queue<int> q;
那么q
将是一个适应向量的优先级队列。
【讨论】:
我知道priority_queue,但我正在学习数据结构。所以我想用向量或列表来处理。以上是关于C ++将元素插入向量的主要内容,如果未能解决你的问题,请参考以下文章