我編寫了下面的代碼,用於將唯一值插入數據結構中,從中我可以按排序順序檢索值(在下面的代碼中,我使用了優先級隊列來實現此目的,但是,任何其他數據結構如分類矢量也可以使用)。但是,我發現下面的代碼非常慢,因爲我將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