本文介绍一下set的不同初始化方法。

基本用法

在初始化 set 之前,首先需要包含 <set> 头文件,并使用 std::set 命名空间。

1
#include <set>

特点和注意事项

  • 初始化方法多样:可以使用默认构造函数、初始化列表、范围初始化、复制构造函数、移动构造函数等方法来初始化 set
  • 自动排序:插入元素时会自动排序。
  • 唯一性set 不允许有重复的元素。
  • 高效性:查找、插入和删除操作的时间复杂度均为 O(log n)。

示例代码

1. 默认构造函数

创建一个空的 set,并根据需要插入元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <set>
#include <iostream>

int main() {
std::set<int> s; // 创建一个空的set
s.insert(10);
s.insert(5);
s.insert(20);

for (const auto& elem : s) {
std::cout << elem << " ";
}
return 0;
}

2. 使用初始化列表

直接在声明时初始化 set

1
2
3
4
5
6
7
8
9
10
#include <set>
#include <iostream>

int main() {
std::set<int> s = {10, 5, 20, 5}; // 使用初始化列表
for (const auto& elem : s) {
std::cout << elem << " ";
}
return 0;
}

3. 使用范围(区间)初始化

可以使用另一个容器的元素范围来初始化 set

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <set>
#include <vector>
#include <iostream>

int main() {
std::vector<int> vec = {10, 5, 20, 15, 10}; // 创建一个vector,其中包含一些重复元素
std::set<int> s(vec.begin(), vec.end()); // 使用vector的范围来初始化set

std::cout << "Elements in set initialized from vector: ";
for (const auto& elem : s) {
std::cout << elem << " "; // 打印set中的元素
}
std::cout << std::endl;

return 0;
}

4. 复制构造函数

可以使用已有的 set 来初始化新的 set

1
2
3
4
5
6
7
8
9
10
11
12
#include <set>
#include <iostream>

int main() {
std::set<int> s1 = {10, 5, 20};
std::set<int> s2(s1); // 使用另一个set来初始化

for (const auto& elem : s2) {
std::cout << elem << " ";
}
return 0;
}

5. 移动构造函数

可以使用已有的 set 来移动初始化新的 set

1
2
3
4
5
6
7
8
9
10
11
12
#include <set>
#include <iostream>

int main() {
std::set<int> s1 = {10, 5, 20};
std::set<int> s2(std::move(s1)); // 使用另一个set来移动初始化

for (const auto& elem : s2) {
std::cout << elem << " ";
}
return 0;
}

总结

C++ 提供了多种方法来初始化 set,从默认构造函数到使用初始化列表、范围初始化、复制构造函数和移动构造函数等。选择合适的初始化方法可以使代码更加简洁和高效。了解这些初始化方法有助于在实际编程中根据具体需求灵活地创建和初始化 set

使用 vector 初始化 set 是一种方便的方法,可以将 vector 中的元素快速插入到 set 中,并自动去重和排序。这种方法特别适用于需要从其他容器转换为 set 的情况。理解这些初始化方法可以帮助更有效地利用 set 容器。


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。