我使用C++ stable_sort使用比较器函数按升序对类对象的向量进行排序,但排序不稳定。其中一项工作是逆转、迭代和逆转比较器中的逻辑。但不明白为什么它不能正常工作。代码:
using namespace std;
class Pair{
string str;
int num;
public:
Pair(string s, int n):str(s), num(n)
{}
Pair(const Pair &a)
{
str = a.str;
num = a.num;
}
int Num()
{
return num;
}
string Str() const{
return str;
}
void set(string s, int n)
{
str = s;
num=n;
}
void print() const{
cout<<"\n"<<num<<" "<<str;
}
};
bool comparator( Pair a, Pair b)
{
return a.Num()<=b.Num();
}
int main() {
int n;
cin >> n;
vector<Pair> arr;
for(int a0 = 0; a0 < n; a0++){
int x;
string s;
cin >> x >> s;
if((a0+1)<=n/2)
s="-";
Pair p(s, x);
arr.push_back(p);
}
cout<<"\n Before sort";
for(auto i:arr)
i.print();
stable_sort(arr.begin(), arr.end(), comparator);
cout<<"\n\n After sort";
for(auto i:arr)
i.print();
return 0;
}结果:在0-6-0-6-4-0-0-6-0-4之前,3是0到1是5,问题1或2,而不是4是2至4
在0到0-0-0-0-1或1是2-2而不是3是4之后,4是4-5问题6-6-6-6-6-
发布于 2018-04-29 11:23:07
comp -比较函数对象(即满足比较要求的对象),如果第一个参数小于(即在第二个参数之前排序),则返回true。
来自排序。比较器必须实现严格的弱排序。还请参阅这里,以获得确切需求的表。
您的比较器错了,对于相同的元素,它也返回true。
https://stackoverflow.com/questions/50085982
复制相似问题