一、使用快排代替默認排序
默認的排序方法通常是使用紅黑樹等數據結構實現的,時間複雜度為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