如何讓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/zh-tw/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

發表回復

登錄後才能評論