struct list push_back的C++问题

Mic*_*ber 2 c++ compiler-errors list priority-queue

我有两个结构(部分任务).一个列表 - 活动,包含在另一个 - 流程中.然后,几个父Process结构包含在优先级队列中.

struct Activity {
public:
    int time;
    string type;
    Activity(int newTime, string newType):
    time(newTime),type(newType){}
};

struct Process {
public:
    string PID;
    int arrivalTime;
    int priority;
    list<Activity> activityQueue;
    Process( string newPID, int newTime, int newPriority, list<Activity>
         newActivityQueue):
    PID(newPID),arrivalTime(newTime), priority(newPriority), 
         activityQueue(newActivityQueue){}
Run Code Online (Sandbox Code Playgroud)

};

我收到以下错误...

main.cpp:206:61: error: passing ‘const std::list<Activity>’ as ‘this’ argument of
‘void std::list<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Activity,
_Alloc = std::allocator<Activity>, std::list<_Tp, _Alloc>::value_type = 
Activity]’ discards qualifiers [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

...当我尝试将一个Activity推送回Process的activityQueue时.

Activity currentActivity = cpuQueue.top().activityQueue.back();
currentActivity.time--
cpuQueue.top().activityQueue.push_back(currentActivity);
Run Code Online (Sandbox Code Playgroud)

Use*_*ess 5

std::priority_queue<T>::top()返回对顶部项的const引用:这样就不能就地改变它并破坏排序约束.

如果您对活动列表是一个不会影响进程在cpu队列中的位置的实现细节感到高兴,那么您可以使其Process::activityQueue 变为可变.

否则,您应该将进程拉出队列,修改它并重新添加.