相关疑难解决方法(0)

如何使用用户定义的对象从priority_queue获取非const顶级元素?

std :: priority_queue :: top返回一个常量值.但是,我想从优先级队列中删除顶部元素,并能够在其他地方修改它.

priority_queue<SomeClass, vector<SomeClass>, SomeClassCompare > pQueue;
...
SomeClass *toBeModified = &(pQueue.top());
pQueue.pop();
toBeModified->setMember(3); // I would like to do this
Run Code Online (Sandbox Code Playgroud)

有没有办法可以从优先级队列中获取顶级元素(并从队列中删除)并按照我的意愿修改它?

c++ const priority-queue c++11

12
推荐指数
1
解决办法
4493
查看次数

在C++ 11中移出std priority_queue的元素

最小的工作示例.

#include <cassert>
#include <list>
#include <queue>
//#define USE_PQ

struct MyClass
{
    const char* str;
    MyClass(const char* _str) : str(_str) {}
    MyClass(MyClass&& src) { str = src.str; src.str = nullptr; }
    MyClass(const MyClass&) = delete;
};

struct cmp_func
{
    bool operator() (const MyClass&, const MyClass&) const
    {
        return true;
    }
};

typedef std::priority_queue<MyClass, std::vector<MyClass>, cmp_func> pq_type;

#ifdef USE_PQ
MyClass remove_front(pq_type& l)
{
    MyClass moved = std::move(l.top());
    // error from the above line:
    // use of deleted function ‘MyClass::MyClass(const MyClass&)’
    l.pop(); …
Run Code Online (Sandbox Code Playgroud)

c++ move-constructor move-semantics c++11

8
推荐指数
4
解决办法
4163
查看次数

从优先级队列中获取unique_ptr

我正在维护一组unique_ptr实例priority_queue.在某些时候,我想获得第一个元素并将其从队列中删除.但是,这总是会产生编译器错误.请参阅下面的示例代码

int main ()
{
  std::priority_queue<std::unique_ptr<int>> queue;
  queue.push(std::unique_ptr<int>(new int(42)));

  std::unique_ptr<int> myInt = std::move(queue.top());
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下编译器错误(gcc 4.8.0):

uptrtest.cpp: In function ‘int main()’: uptrtest.cpp:6:53: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]’    std::unique_ptr<int> myInt = std::move(queue.top());
                                                     ^ In file included from /usr/include/c++/4.8/memory:81:0,
                 from uptrtest.cpp:1: /usr/include/c++/4.8/bits/unique_ptr.h:273:7: error: declared here
       unique_ptr(const unique_ptr&) = delete;
       ^
Run Code Online (Sandbox Code Playgroud)

更改要queue此问题中使用的代码可以解决问题并且代码编译得很好.

有没有办法保持unique_ptrs priority_queue或我错过了什么?

c++ priority-queue unique-ptr c++11 gcc4.8

6
推荐指数
2
解决办法
3090
查看次数