【问题标题】:C++ - invalid operands to binary expressionC++ - 二进制表达式的无效操作数
【发布时间】:2015-03-20 20:09:50
【问题描述】:

我正在尝试使用std::sort 对结构列表进行排序。但我得到了错误:

invalid operands to binary expression ('std::__1::__list_iterator<process, void *>' and 'int') __sort3<_Compare>(__first, __first+1, __j, __comp);

结构:

struct process {
   int process_id;
   int cpu_cycles;
   int mem_footprint;
};

主要功能:

int main() {

    list<process> process_list;

    init_process_list(process_list);
    sort(process_list.begin(), process_list.end(), compare_pid);

}

init_process_list:

void init_process_list(list<process> &p_list) {

    cout << "\n>> Generating process list...";

    generator generate; // Random number generator class
    process p;

    for(int i = 0; i < process_count; i++) {
        p.process_id = i;
        p.cpu_cycles = generate.rand_num_between(cycle_lbound, cycle_ubound);
        p.mem_footprint = generate.rand_num_between(mem_lbound, mem_ubound);
        p_list.push_back(p);
    }

    cout << "Done" << endl;

}

compare_pid:

bool compare_pid(process &lhs, process &rhs) { 
    return lhs.cpu_cycles < rhs.cpu_cycles;  
}

我想按 cpu_cyclles 值升序对列表中的所有进程项进行排序。我还制作了 compare_pid 函数,它接受两个进程并返回一个布尔值。我无法弄清楚错误是什么。有人可以帮忙吗?

【问题讨论】:

  • 第一个猜测:谓词中缺少const
  • @MooingDuck 尝试添加 const 但没有运气。还是一样的错误
  • std::sort 需要 RandomAccessIterators,std::list 是双向的

标签: c++ sorting stl


【解决方案1】:

二进制表达式的无效操作数
('std::__1::__list_iterator' 和 'int')
__sort3<_compare>(__first, __first+1, __j, __comp);

好的,第三行代码在std::sort 的某个地方。唯一的运营商是+。所以有错误的表达式是__first+1,其中__first 是list&lt;process&gt;::iterator。列表迭代器没有iterator+int 重载,因为它们是双向迭代器,但不是随机访问。

您不能通过std::list 呼叫std::sort。请改用std::vector,或其他带有随机访问迭代器的容器。

【讨论】:

  • 那行得通。超过时限时将接受答案。谢谢
猜你喜欢
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多