首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::priority_queue复合类型?

std::priority_queue复合类型?
EN

Stack Overflow用户
提问于 2013-07-28 07:48:33
回答 2查看 477关注 0票数 0

我想使用一个具有复杂类型的std::priority_queue:

代码语言:javascript
复制
typedef struct
{
uint8_t data;
    uint64_t moredata;
}myData;

typedef struct
{
    boost::mutex someQueueLock;
    std::priority_queue<myData> myQueue; //does not work
}

我不想使用满是指针的队列(priority_queue),因为指针可能会变得无效。

这有可能吗?还是我应该再用一个性病容器?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-28 07:54:27

队列默认使用operator<对元素进行排序,它要求元素必须是严格弱有序的

您需要为operator<类型定义myData函数

代码语言:javascript
复制
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<.

票数 2
EN

Stack Overflow用户

发布于 2013-07-28 07:54:54

您需要定义自己的比较函数,以便priority_queue知道哪些项具有更高的优先级。

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17906131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档