📌  相关文章
📜  查找第 k 个最小元素和点更新的查询:C++ 中的有序集(1)

📅  最后修改于: 2023-12-03 15:40:25.156000             🧑  作者: Mango

查找第 k 个最小元素和点更新的查询:C++ 中的有序集

简介

有序集是一种基于平衡树数据结构的数据结构,在 C++ 中对应的数据结构为 set,其可以支持多种操作,包括插入、删除、查找第 k 个最小元素和点更新等。在本文中,我们将主要关注查找第 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)$。

参考资料