如何让SET排序更加高效?

一、使用快排代替默认排序

默认的排序方法通常是使用红黑树等数据结构实现的,时间复杂度为O(nlogn),但是如果使用快速排序的话,时间复杂度可以降为O(nlogn),在处理大量数据时,这种提升是非常显著的。


#include <set>
#include <algorithm>

template <typename T>
void QuickSort(std::set<T>& s)
{
    std::vector<T> elements;
    elements.reserve(s.size());
    for (auto it = s.begin(); it != s.end(); ++it) {
        elements.push_back(std::move(*it));
    }
    std::sort(std::begin(elements), std::end(elements));
  
    s.clear();
    for (auto& elem : elements) {
        s.insert(std::move(elem));
    }
}

二、使用自定义的比较函数

当set存储的是自定义的数据类型时,可以使用自定义的比较函数代替默认的比较方式,这样可以更加高效地完成排序。


struct Person {
    int age;
    std::string name;

    bool operator <(const Person& other) const
    {
        return age < other.age;
    }
};

struct PersonCompare {
    bool operator()(const Person& lhs, const Person& rhs) const
    {
        return lhs.age < rhs.age;
    }
};

std::set<Person, PersonCompare> people;

三、使用emplace代替insert

当插入新的元素时,可以使用emplace代替insert,这样可以避免临时对象的创建和销毁,提高代码的效率。


std::set<int> s;

s.emplace(42);
s.emplace(1337);

四、使用lower_bound和upper_bound代替find

当查找特定元素时,可以使用lower_bound和upper_bound代替find,这样既可以找到等于指定值的元素,也可以找到第一个大于指定值的元素。


std::set<int> s = {1, 2, 4, 8, 16};

auto lower = s.lower_bound(4); // returns iterator to 4
auto upper = s.upper_bound(4); // returns iterator to 8

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/192507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-01 10:28
下一篇 2024-12-01 10:28

相关推荐

  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • Python Set元素用法介绍

    Set是Python编程语言中拥有一系列独特属性及特点的数据类型之一。它可以存储无序且唯一的数据元素,这使得Set在数据处理中非常有用。Set能够进行交、并、差集等操作,也可以用于…

    编程 2025-04-29
  • Trocket:打造高效可靠的远程控制工具

    如何使用trocket打造高效可靠的远程控制工具?本文将从以下几个方面进行详细的阐述。 一、安装和使用trocket trocket是一个基于Python实现的远程控制工具,使用时…

    编程 2025-04-28
  • Python生成列表最高效的方法

    本文主要介绍在Python中生成列表最高效的方法,涉及到列表生成式、range函数、map函数以及ITertools模块等多种方法。 一、列表生成式 列表生成式是Python中最常…

    编程 2025-04-28
  • TFN MR56:高效可靠的网络环境管理工具

    本文将从多个方面深入阐述TFN MR56的作用、特点、使用方法以及优点,为读者全面介绍这一高效可靠的网络环境管理工具。 一、简介 TFN MR56是一款多功能的网络环境管理工具,可…

    编程 2025-04-27
  • 用Pythonic的方式编写高效代码

    Pythonic是一种编程哲学,它强调Python编程风格的简单、清晰、优雅和明确。Python应该描述为一种语言而不是一种编程语言。Pythonic的编程方式不仅可以使我们在编码…

    编程 2025-04-27
  • Python生成10万条数据的高效方法

    本文将从以下几个方面探讨如何高效地生成Python中的10万条数据: 一、使用Python内置函数生成数据 Python提供了许多内置函数可以用来生成数据,例如range()函数可…

    编程 2025-04-27
  • Python set去重保留原顺序

    当一个列表中出现重复的元素时,为了去除这些重复元素可以使用Python提供的集合(set)数据结构,集合可以去除元素的重复出现。然而,这样会导致原有的元素顺序混乱,这时,需要使用一…

    编程 2025-04-27
  • Gino FastAPI实现高效低耗ORM

    本文将从以下多个方面详细阐述Gino FastAPI的优点与使用,展现其实现高效低耗ORM的能力。 一、快速入门 首先,我们需要在项目中安装Gino FastAPI: pip in…

    编程 2025-04-27
  • 如何利用字节跳动推广渠道高效推广产品

    对于企业或者个人而言,推广产品或者服务是必须的。如何让更多的人知道、认识、使用你的产品是推广的核心问题。而今天,我们要为大家介绍的是如何利用字节跳动推广渠道高效推广产品。 一、个性…

    编程 2025-04-27

发表回复

登录后才能评论