参考文献:
std::sort的详细用法 - hchacha - 博客园
代码(取自文献1):
#include <algorithm>
#include <array>
#include <functional>
#include <iostream>
int main() {
std::array<int, 10> s = {5, 7, 4, 2, 8, 6, 1, 9, 0, 3};
// sort using the default operator<
std::sort(s.begin(), s.end());
for (auto a : s) {
std::cout << a << " "; // 0 1 2 3 4 5 6 7 8 9
}
std::cout << '\n';
// sort using a standard library compare function object
std::sort(s.begin(), s.end(), std::greater<int>());
for (auto a : s) {
std::cout << a << " "; // 9 8 7 6 5 4 3 2 1 0
}
std::cout << '\n';
// sort using a custom function object
struct {
bool operator()(int a, int b) const { return a < b; }
} customLess;
std::sort(s.begin(), s.end(), customLess);
for (auto a : s) {
std::cout << a << " "; // 0 1 2 3 4 5 6 7 8 9
}
std::cout << '\n';
// sort using a lambda expression
std::sort(s.begin(), s.end(), [](int a, int b) { return b < a; });
for (auto a : s) {
std::cout << a << " "; // 9 8 7 6 5 4 3 2 1 0
}
std::cout << '\n';
}
应用场景+变种:
排序网卡
std::vector<std::string> wwan_ifnames_;
int32_t WwanV2::Start(const std::vector<std::string>& ifnames) {
for (const auto& x : ifnames) {
if (x.find("wwan") != std::string::npos) {
wwan_ifnames_.push_back(x);
}
}
std::sort(wwan_ifnames_.begin(), wwan_ifnames_.end(),
[](const std::string& x, const std::string& y) { return x < y; });
信号降序排序
std::vector<WifiInfo>* list
// rssi降序排序
std::sort(list->begin(), list->end(), [](const WifiInfo& x, const WifiInfo& y) { return x.rssi > y.rssi; });
按照连接持续时间升序
std::list<WifiStaInfo>* list
// 按照duration升序
list->sort([](const WifiStaInfo& x, const WifiStaInfo& y) { return x.duration < y.duration; });