如何自定义一个函数对象来操作std::vector<int>进行排序,按照奇数优先于偶数,且在奇数和偶数各自内部按照升序排序的方法进行排序
时间: 2024-10-13 10:06:02 浏览: 25
C++实现希尔伯特变换的4个步骤,附带代码示例.docx
要自定义一个函数对象用于`std::sort`,首先你需要创建一个符合`Comparator`模板类型的类,这个类通常继承自`std::less<T>`,并提供重载的`operator()`。针对你的需求,可以创建一个名为`OddEvenSort`的类,如下所示:
```cpp
#include <algorithm>
#include <vector>
#include <functional>
class OddEvenSort : public std::less<std::pair<int, bool>> {
public:
bool is_odd(int num) const {
return num % 2 != 0;
}
bool operator()(const std::pair<int, bool>& a, const std::pair<int, bool>& b) const {
// 首先比较奇偶性,然后在同一奇数或偶数内按升序排序
if (is_odd(a.first) != is_odd(b.first)) {
return is_odd(a.first);
} else {
return a.first < b.first;
}
}
};
int main() {
std::vector<std::pair<int, bool>> vec = {{4, false}, {3, true}, {2, false}, {1, true}};
std::sort(vec.begin(), vec.end(), OddEvenSort());
for (const auto& pair : vec) {
std::cout << "Value: " << pair.first << ", Even/Odd: " << (pair.second ? "Odd" : "Even") << "\n";
}
return 0;
}
```
在这个例子中,我们创建了一个`OddEvenSort`类,它将整数与其是否为奇数关联起来,并实现了比较器的逻辑。`main`函数中,我们使用这个自定义的比较器对一个`std::vector`进行排序。
阅读全文