我编写了下面的代码,用于将唯一值插入数据结构中,从中我可以按排序顺序检索值(在下面的代码中,我使用了优先级队列来实现此目的,但是,任何其他数据结构如分类矢量也可以使用)。但是,我发现下面的代码非常慢,因为我将100万个值插入到我的优先级队列中。是否有人可以帮助我明白,我怎么能提高如下代码:将值唯一地插入优先级队列C++
class unique_queue1 {
//private:
public:
std::priority_queue<std::pair<vector<int>, double>, vector<std::pair<vector<int>, double> >, CompareClass1 > m_queue;
std::set<vector<int> > m_set;
//public:
bool push(const pair<vector<int>, double> & t) {
if (m_set.insert(t.first).second) {
m_queue.push(t);
return true;
}
return false;
}
void pop() {
assert(!m_queue.empty());
const std::pair<vector<int>, double>& val = front();
std::set<vector<int> >::iterator it = m_set.find(val.first);
assert(it != m_set.end());
m_set.erase(it);
m_queue.pop();
}
const pair<vector<int>, double>& front() const {
return m_queue.top();
}
bool empty() const{
return m_queue.empty();
}
};
如果您需要'set'那么你并不需要的优先级队列。 'set'总是有第一个项目可以轻松访问。你不需要额外的'find'工作来匹配'set'中的第一项,你根本不需要优先级队列。 – JSF
@JSF我对C++有点新鲜。如果可能的话,我会非常感激,如果你能帮我一点代码。作为C++的新手,我无法理解你在说什么。在我的代码中,我保持“设置”,以便插入优先级队列的值(矢量)是唯一的 –
您需要多快?更改'set'来完成整个工作并消除优先级队列应该使代码快两倍。但是如果你需要更多的改进,你需要更加基本的重新设计。为了使'set'完成整个工作,它必须保存相同的对象,并且具有现在用于优先级队列的相同比较功能(而不仅仅是大部分对象和默认比较)。 – JSF