rexaron

导航

算法小笔记0424

1

在 C++ 中,multiset 是一种容器适配器,它允许存储多个具有相同键的元素。它是 set 的一个变体,与 set 不同的是,multiset 允许重复的元素。multiset 中的元素按照特定的排序标准自动排序,这个排序标准是在容器创建时指定的。
下面是一个使用 multiset 的简单示例:

#include <iostream>
#include <set>
using namespace std;

int main() {
    // 创建一个 multiset,其中存储的元素将按照内置的 lessThan 函数自动排序
    multiset<int> nums;

    // 添加一些元素
    nums.insert(3);
    nums.insert(1);
    nums.insert(4);
    nums.insert(1); // multiset 允许重复元素

    // 输出 multiset 中的元素
    for (const int num : nums) {
        cout << num << ' ';
    }
    cout << endl;

    // 删除所有的 1
    nums.erase(1);

    // 再次输出 multiset 中的元素
    for (const int num : nums) {
        cout << num << ' ';
    }
    cout << endl;

    return 0;
}

在这个示例中,我们创建了一个 multiset 来存储整数。我们添加了一些整数,包括重复的 1。由于 multiset 会自动排序,所以输出时元素是按照升序排列的。然后我们删除了所有的 1,并再次输出剩余的元素。
multiset 的主要特点是:

  • 元素按照排序标准自动排序。
  • 元素可以重复。
  • 插入和删除操作通常是对数时间复杂度。
  • 不允许通过迭代器直接修改元素值,因为这会破坏元素的排序顺序。
    multiset 通常在需要快速查找、插入和删除,并且不需要唯一性保证的情况下使用。

2

在 C++ 中,#pragma GCC optimize(2) 是一个编译指示,用于告诉 GCC 编译器以特定的优化级别编译代码。这个指示是 GCC 特有的,不会在其他编译器中产生效果。
#pragma GCC optimize 指示可以接受多个参数,其中 2 表示的是一个特定的优化级别。GCC 的优化级别通常从 03,其中 0 表示没有优化(-O0),1 表示一级优化(-O1),2 表示二级优化(-O2),3 表示三级优化(-O3)。这些优化级别会逐渐增加编译器对代码执行的优化程度,可能会包括循环展开、函数内联、指令重排等。
下面是一个使用 #pragma GCC optimize(2) 的示例:

#include <iostream>
int main() {
    // 告诉 GCC 使用二级优化
    #pragma GCC optimize(2)
    // 你的代码
    int sum = 0;
    for (int i = 0; i < 1000000; ++i) {
        sum += i;
    }
    std::cout << "Sum: " << sum << std::endl;
    return 0;
}

在这个示例中,我们告诉 GCC 对 main 函数中的代码使用二级优化。这可能会使得这段代码运行得更快,因为编译器会尝试优化循环和相关的计算。
需要注意的是,优化级别 2 通常是一个很好的平衡点,因为它提供了适度的优化而不会像 3 那样可能导致编译时间显著增加或代码大小显著增大。然而,优化并不总是能够提高程序的运行速度,有时候它可能会导致代码大小增加或者特定情况下的性能下降。因此,在使用优化时,应该对程序的性能进行测试,以确保优化确实带来了预期的效果。

posted on 2024-04-24 08:54  rexrex  阅读(8)  评论(0编辑  收藏  举报