【发布时间】:2015-02-22 12:09:53
【问题描述】:
我想创建一个包含唯一元素的优先级队列。我发现可以按如下方式创建包含唯一向量元素的队列:
template <typename T>
class queue1 {
private:
std::queue<T> m_queue;
std::set<T> m_set;
public:
bool push(const T& t) {
if (m_set.insert(t).second) {
m_queue.push(t);
return true;
}
return false;
}
};
queue1<vector<unsigned> > queueUnique;
但我的要求是除了包含唯一向量元素的队列之外,它应该是一个优先级队列,因为我队列中的每个向量都有一个与之关联的分数。我尝试使用以下方法创建此队列:
priority_queue<queueUnique, vector<queueUnique>, ComparisonFunction> pq;
但这似乎是不正确的,因为它给出了一个队列。
我不知道我应该如何将分数与每个向量相关联,以便我得到的结果队列是具有唯一向量元素的优先级队列。例如,如果我的队列是:
struct myDS{
vector<unsigned> vec;
double score;
};
queue<myDS> myqueue;
vector<unsigned> dummyVec1;
dummyVec1.push_back(5);
myDS obj;
obj.vec=dummyVec1;
obj.score=0.9;
vector<unsigned> dummyVec2;
dummyVec2.push_back(5);
myDS obj2;
obj2.vec=dummyVec2;
obj2.score=0.9; //with duplicate values score is always same so can be eliminated
那么如何创建一个在 obj.score 上排序但不包含重复元素的优先级队列。例如,上面的 myqueue 应该只包含一次“5”。
【问题讨论】:
-
如何计算给定向量的分数?
-
@Galik 感谢您的回复。分数是为每个唯一向量随机生成的
-
另外,当您说“唯一向量元素”时,您的意思是“没有两个具有相同分数的向量”或“没有两个具有相同向量的分数”或两者兼而有之?
-
@Galik 两者。默认情况下,当两个向量相同时,它们也具有与之关联的相同分数。所以,通过这种方式,它们是相关的