我想使用一个具有复杂类型的std::priority_queue:
typedef struct
{
uint8_t data;
uint64_t moredata;
}myData;
typedef struct
{
boost::mutex someQueueLock;
std::priority_queue<myData> myQueue; //does not work
}我不想使用满是指针的队列(priority_queue),因为指针可能会变得无效。
这有可能吗?还是我应该再用一个性病容器?
发布于 2013-07-28 07:54:27
队列默认使用operator<对元素进行排序,它要求元素必须是严格弱有序的。
您需要为operator<类型定义myData函数
bool operator<(const myData& lhs, const myData& rhs)
{
return lhs.data < rhs.data;
}§23.6.4.1类模板priority_queue
任何具有随机访问迭代器并支持push_back()、pop_back()和priority_queue ()操作的序列容器都可以用于实例化priority_queue。特别是可以使用矢量(23.3.6)和deque (23.3.3)。实例化priority_queue还包括提供一个函数或函数对象来进行优先级比较;该库假定函数或函数对象定义了一个严格的弱排序 (25.4)。
第25.4节
25.4中的所有操作都有两个版本:一个接受类型比较的函数对象,另一个使用operator<.。
发布于 2013-07-28 07:54:54
您需要定义自己的比较函数,以便priority_queue知道哪些项具有更高的优先级。
bool MyCompare(const myData& left, const myData& right)
{
// todo: return true if left has higher priority than right
}
std::priority_queue<myData, std::vector<myData>, MyCompare> queue;https://stackoverflow.com/questions/17906131
复制相似问题