我有一个使用编写的函数std::multimap
正是因为std::multimap
。经过分析,我意识到我只使用了std::multimap
as a heap,所以我尝试用std::priority_queue
它只允许堆操作,希望这种用法会更快。
当然,元素类型std::priority_queue
需要是std::pair<mmKey, mmValue>
,然后我会将自定义比较器传递给std::priority_queue
仅比较该对中的第一个值(这是该值的实际键)std::multimap
).
由于一切都是模板化的,我..迷失了方向,需要帮助。我做了一个示例代码:
示例与std::multimap
template <typename Compare>
void littleTestFunction(Compare comp){
std::multimap<int,int,Compare> testMap(comp);
testMap.insert(std::make_pair(1,5));
testMap.insert(std::make_pair(1,6));
testMap.insert(std::make_pair(2,7));
for (; !testMap.empty(); ){
std::cout << testMap.begin()->second << std::endl;
testMap.erase(testMap.begin());
}
return;
}
int main(void){
littleTestFunction(std::less<int>());
}
我的尝试改变std::multimap
to std::priority_queue
template <typename Compare>
class pqcomparison{
private:
Compare myComp;
public:
pqcomparison(Compare &cmp){
myComp = cmp;
}
bool operator() (const std::pair<int, int> &lhs,
const std::pair<int, int> &rhs){
return myComp(rhs.first, lhs.first);
}
};
template <typename Compare>
void littleTestFunction(Compare comp){
std::priority_queue<std::pair<int, int>,
std::vector<std::pair<int, int> >,
pqcomparison<Compare> >
mypq(pqcomparison<Compare>(comp));
mypq.push(std::make_pair(1,5));
mypq.push(std::make_pair(1,6));
mypq.push(std::make_pair(2,7));
for (; !mypq.empty(); ){
std::cout << mypq.top().second << std::endl;
mypq.pop();
}
return;
}
当我只编译std::priority_queue
声明,我没有收到任何错误。但是,当我尝试编译整个函数时,我收到有关所有成员函数的错误消息std::priority_queue
.
有人可以建议一个解决方案吗?