如何在C++/C中使用优先级队列对函数进行排序



我想要数组"函数";按优先级

E.g SetNumber1是第一个SetNumber2是第二个ReadNumbers是最后一个

////////////////

priority_queue < ??? > Q
Q.push(ReadNumbers());
Q.push(SetNumber2());
Q.push(SetNumber1());

我想执行以便SetNumber1((、SetNumber2((、ReadNumbers((

谢谢。

很抱歉我的英语技巧,我是韩国人,我不擅长英语

std::priority_queue使用的是一个比较函数,该函数不能与给定的函数一起使用。您需要将自己的优先级定义为枚举,然后可以将prio和函数对放在std::multimap中,这样所有函数都可以根据它们的prio进行调用。你也可以把这对放在prio-q中,但你仍然需要一个只对prio有效的比较函数。

例如:

#include <iostream>
#include <map>
#include <functional>

enum class prio { HI, MID, LO };
int main()
{
std::multimap<prio, std::function<void()>> prio_mmap;
prio_mmap.insert(std::make_pair(prio::MID, []{ std::cout << "MID1n"; }));
prio_mmap.insert(std::make_pair(prio::LO, []{ std::cout << "LOn"; }));
prio_mmap.insert(std::make_pair(prio::HI, []{ std::cout << "HIn"; }));
prio_mmap.insert(std::make_pair(prio::MID, []{ std::cout << "MID2n"; }));

for (const auto& p: prio_mmap)
{
p.second();
}
}

最新更新