我正在尝试对包含自定义结构的std::vector
进行排序,每个自定义结构都有自己的vector
int
个值。关键是我想根据内部int
vector
的排序进行排序... {1, 1, 2, 3, 4}
小于{1, 2, 2, 3, 4}
因为vector
中的第二个值{1}}。
在我看来,这将提供严格的弱排序,但在运行时我总是收到Invalid Comparator异常。我还尝试将单独的键函数实现为std::sort()
的第三个参数,但同样的事情发生了。
我做错了什么?
#include <iostream>
#include <algorithm>
#include <vector>
typedef struct AA {
std::vector<int> AA_v;
bool operator<(const AA& a1)const {
for (int i = 0; i < this->AA_v.size(); i++) {
if (this->AA_v[i] < a1.AA_v[i]) {
return true;
}
}
return false;
}
}AA;
void main(void) {
AA a1, a2, a3, a4;
a1.AA_v = { 1, 1, 3, 5, 4 };
a2.AA_v = { 1, 1, 2, 4, 5 };
a3.AA_v = { 0, 1, 3, 5, 4 };
a4.AA_v = { 1, 1, 3, 4, 5 };
std::vector<AA> AA_vector;
AA_vector.push_back(a1);
AA_vector.push_back(a2);
AA_vector.push_back(a3);
AA_vector.push_back(a4);
std::sort(AA_vector.begin(), AA_vector.end());
}
答案 0 :(得分:4)
尝试
bool operator<(const AA& a1)const {
for (int i = 0; i < this->AA_v.size(); i++) {
if (this->AA_v[i] < a1.AA_v[i]) {
return true;
}
else if (this->AA_v[i] > a1.AA_v[i]) {
return false;
}
}
return false;
}
否则,对于您的代码,{3, 1}
结果小于{1, 3}
,结果也是{1, 3}
小于{3, 1}
。
P.s。:但您也可以将operator<()
用于矢量
bool operator< (const AA& a1) const
{ return this->AA_v < a1.AA_v; }