我有一个使用std::multimap
它编写的函数,正是因为std::multimap
. 经过分析,我意识到我只是将std::multimap
用作堆,因此我尝试将其替换为std::priority_queue
仅允许堆操作的 a ,希望这种用法会更快。
当然,元素类型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
将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
.
有人可以提出解决方案吗?