C++ - 二进制表达式的无效操作数
C++ - invalid operands to binary expression
我正在尝试使用 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_cylcles 值的升序对列表中的所有流程项目进行排序。我还制作了 compare_pid 函数,它接受两个进程和 returns 一个布尔值。我不知道错误是什么。有人可以帮忙吗?
invalid operands to binary expression
('std::__1::__list_iterator' and 'int')
__sort3<_Compare>(__first, __first+1, __j, __comp);
好的,第三行代码在 std::sort
的某处。那里唯一的运算符是 +
。所以有错误的表达式是 __first+1
,其中 __first
是 list<process>::iterator
。列表迭代器没有 iterator+int
重载,因为它们是双向迭代器,但不是随机访问。
您不能在 std::list
上调用 std::sort
。请改用 std::vector
,或另一个具有随机访问迭代器的容器。
我正在尝试使用 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_cylcles 值的升序对列表中的所有流程项目进行排序。我还制作了 compare_pid 函数,它接受两个进程和 returns 一个布尔值。我不知道错误是什么。有人可以帮忙吗?
invalid operands to binary expression
('std::__1::__list_iterator' and 'int')
__sort3<_Compare>(__first, __first+1, __j, __comp);
好的,第三行代码在 std::sort
的某处。那里唯一的运算符是 +
。所以有错误的表达式是 __first+1
,其中 __first
是 list<process>::iterator
。列表迭代器没有 iterator+int
重载,因为它们是双向迭代器,但不是随机访问。
您不能在 std::list
上调用 std::sort
。请改用 std::vector
,或另一个具有随机访问迭代器的容器。