在C++中,std::set
是一個關聯容器,它會根據元素的大小自動排序。std::set
內部使用紅黑樹實現,因此插入和查找操作的時間復雜度都是O(log n)。要將C++ set與算法結合使用,你可以使用以下方法:
std::set_intersection
計算兩個集合的交集:#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
int main() {
std::set<int> s1 = {1, 2, 3, 4, 5};
std::set<int> s2 = {4, 5, 6, 7, 8};
std::vector<int> result;
std::set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), std::back_inserter(result));
for (int i : result) {
std::cout<< i << " ";
}
return 0;
}
std::set_difference
計算兩個集合的差集:#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
int main() {
std::set<int> s1 = {1, 2, 3, 4, 5};
std::set<int> s2 = {4, 5, 6, 7, 8};
std::vector<int> result;
std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), std::back_inserter(result));
for (int i : result) {
std::cout<< i << " ";
}
return 0;
}
std::set_union
計算兩個集合的并集:#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
int main() {
std::set<int> s1 = {1, 2, 3, 4, 5};
std::set<int> s2 = {4, 5, 6, 7, 8};
std::vector<int> result;
std::set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), std::back_inserter(result));
for (int i : result) {
std::cout<< i << " ";
}
return 0;
}
std::set_symmetric_difference
計算兩個集合的對稱差集:#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
int main() {
std::set<int> s1 = {1, 2, 3, 4, 5};
std::set<int> s2 = {4, 5, 6, 7, 8};
std::vector<int> result;
std::set_symmetric_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), std::back_inserter(result));
for (int i : result) {
std::cout<< i << " ";
}
return 0;
}
這些算法可以與std::set
結合使用,以便更方便地操作和處理集合。