如何在C++中对vector进行排序_C++ vector排序函数与自定义比较

升序排序使用std::sort默认行为,降序需传入std::greater();自定义排序可使用函数指针或Lambda表达式;std::sort平均和最坏时间复杂度均为O(n log n),适用于大多数场景,但小数据量、近有序序列或需稳定排序时可考虑插入排序或std::stable_sort。

如何在c++中对vector进行排序_c++ vector排序函数与自定义比较

C++ 中对 vector 排序,通常使用 std::sort 函数,可以自定义比较函数来实现更灵活的排序规则。

使用 std::sort 函数对 vector 进行排序。

如何使用 std::sort 函数对 vector 进行升序和降序排序?

std::sort 函数是 C++

降序排序:

要进行降序排序,可以使用 std::greater 仿函数作为比较函数。

#include #include #include int main() {  std::vector numbers = {5, 2, 8, 1, 9, 4};  std::sort(numbers.begin(), numbers.end(), std::greater()); // 降序  std::cout << "降序排序后: ";  for (int num : numbers) {    std::cout << num << " ";  }  std::cout << std::endl;  return 0;}

在这个例子中,std::greater() 创建了一个比较函数对象,它定义了 > 运算符的行为,从而实现了降序排序。

如何自定义比较函数对 vector 进行排序?

有时,默认的升序或降序排序无法满足需求。例如,需要按照元素的某个特定属性进行排序,或者需要自定义排序规则。这时,可以自定义比较函数。

使用 Lambda 表达式:

Lambda 表达式提供了一种更简洁的方式来定义比较函数。

#include #include #include struct Person {  std::string name;  int age;};int main() {  std::vector people = {    {"Alice", 30},    {"Bob", 25},    {"Charlie", 35}  };  std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) {    return a.name < b.name; // 按姓名升序  });  std::cout << "按姓名排序后: " << std::endl;  for (const auto& person : people) {    std::cout << person.name << ": " << person.age << std::endl;  }  return 0;}

Lambda 表达式 [](const Person& a, const Person& b) { return a.name 定义了一个匿名函数,它接受两个 Person 对象作为参数,并返回一个布尔值,指示它们的姓名是否应该交换位置。

性能优化:std::sort 的时间复杂度是多少?在哪些情况下应该考虑使用其他排序算法

std::sort 通常使用 IntroSort 算法,这是一种混合排序算法,结合了快速排序、堆排序和插入排序的优点。平均时间复杂度为 O(n log n),最坏情况下的时间复杂度也是 O(n log n)。

何时考虑其他排序算法:

在这个例子中,即使有两个 Item 对象的 value 相同(都为 5),它们在排序后的 vector 中的相对顺序仍然保持不变,即原始索引为 0 的 Item 在原始索引为 2 的 Item 之前。

以上就是如何在C++中对vector进行排序_C++ vector排序函数与自定义比较的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1476604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫

关于作者

上一篇 2025年12月19日 00:33:09
下一篇 2025年12月8日 15:35:27

相关推荐

发表回复

登录后才能评论
关注微信