我有排序功能的問題。
我有以下結構:
struct Object {
int value, height;
Object(int v, int h) {
this->value = v;
this->height = h;
}
};
我正在存盤這些物件的向量:std::vector<Object> v
我想對它進行排序,如果高度大于一些i,那么它應該在最后,如果它小于或等于按值排序。
我以前試過這個:
// some value
int i = 4;
std::sort(v.begin(), v.end(), [ & ](Object a, Object b) {
if (b.height > i) {
return false;
}
if (a.height > i) {
return false;
}
return a.value > b.value;
});
但它似乎不起作用..
當我有這些元素時:
std::vector<Object> v = {{3, 10}, {5, 2}, {3, 2}, {2, 10}, {2, 1000000000}};和i = 2
當我列印 v 的值時,排序后我看到它們以完全相同的順序出現
我希望它們按以下順序排列:
{{5, 2}, {3, 2}, {3, 10}, {2, 10}, {2, 1000000000}}
uj5u.com熱心網友回復:
看來您想要類似的東西:
std::sort(v.begin(), v.end(), [ & ](const Object& lhs, const Object& rhs) {
return std::make_pair(lhs.height > i, rhs.value) < std::make_pair(rhs.height > i, lhs.value);
});
uj5u.com熱心網友回復:
我認為這也是解決您問題的方法:
std::sort(v.begin(), v.end(), [ & ](Object a, Object b) {
if (b.height > i) {
// Here is change
return true;
}
if (a.height > i) {
return false;
}
return a.value > b.value;
});
只是在第一個if而不是回傳false回傳true
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/532362.html
標籤:C 算法C 14
上一篇:滑塊輪播JS,反應
