📅  最后修改于: 2023-12-03 15:40:25.156000             🧑  作者: Mango
有序集是一种基于平衡树数据结构的数据结构,在 C++ 中对应的数据结构为 set
,其可以支持多种操作,包括插入、删除、查找第 k 个最小元素和点更新等。在本文中,我们将主要关注查找第 k 个最小元素和点更新的操作。
如果您对有序集还不熟悉,可以查看下面的参考资料进行学习。
我们可以使用 set
中的 find_by_order
函数来查找第 k 个最小元素。该函数的参数为要查询的元素的排名(第一个元素的排名为 0)。如果查询的元素不存在,返回 end()
。
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> s;
s.insert(2);
s.insert(3);
s.insert(1);
s.insert(4);
s.insert(5);
// 查找第 3 个最小元素
auto it = s.find_by_order(2);
if (it != s.end()) {
cout << *it << endl; // 输出 3
}
// 查找不存在的元素
it = s.find_by_order(5);
if (it == s.end()) {
cout << "not found" << endl; // 输出 not found
}
return 0;
}
有序集也支持点更新操作,可以使用 set
中的 erase
函数删除一个元素,然后使用 insert
函数插入一个元素来完成点更新操作。
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> s;
s.insert(2);
s.insert(3);
s.insert(1);
s.insert(4);
s.insert(5);
// 点更新
s.erase(3);
s.insert(6);
// 输出所有元素
for (auto it : s) {
cout << it << " "; // 输出 1 2 4 5 6
}
return 0;
}
有序集是一种非常实用的数据结构,可以用来解决很多实际问题,比如查找第 k 个最小元素和点更新等。在使用时,需要注意其时间复杂度,插入、删除和查找操作的时间复杂度均为 $O(log\ n)$。