目录
目录
内部自动有序、不含重复元素
关于能不能自己造一个cmp,还挺复杂。
访问:只能用迭代器且受限
添加元素:没有pushback,用insert
复杂度:ologn
编辑
查找元素find():返回迭代器
判断元素有无
删除:st.erase()
用迭代器删除
点删除
区间删除
编辑
直接给值
清空.clear()
元素个数。size()
拓展:mutiset不去重,unordered_set不排序
编辑
内部自动有序、不含重复元素
关于能不能自己造一个cmp,还挺复杂。
在C++中,set 是一种基于红黑树实现的容器,它可以自动对元素进行排序。在C++98和C++03标准中,你可以通过传递一个比较函数或者比较对象来自定义set的排序规则。但是,从C++17开始,标准库中已经不再支持使用函数指针作为比较函数,你必须使用函数对象或者lambda表达式。
以下是在C++98/C++03标准中自定义set的比较函数的示例:
cpp
复制
#include <set>
#include <iostream>struct CustomCompare {
bool operator()(const int& lhs, const int& rhs) const {
// 自定义比较规则,例如:按绝对值大小比较
return abs(lhs) < abs(rhs);
}
};int main() {
std::set<int, CustomCompare> mySet;mySet.insert(-10);
mySet.insert(5);
mySet.insert(-20);
mySet.insert(15);for (const int& i : mySet) {
std::cout << i << ' ';
}return 0;
}
在C++11及以后的版本中,你可以使用lambda表达式来自定义比较规则:cpp
复制
#include <set>
#include <iostream>int main() {
// 使用lambda表达式自定义比较规则
auto customCompare = [](const int& lhs, const int& rhs) {
return abs(lhs) < abs(rhs);
};std::set<int, decltype(customCompare)> mySet(customCompare);
mySet.insert(-10);
mySet.insert(5);
mySet.insert(-20);
mySet.insert(15);for (const int& i : mySet) {
std::cout << i << ' ';
}return 0;
}
在这两个示例中,set容器都会根据自定义的比较规则对元素进行排序。在第一个例子中,我们定义了一个struct来作为比较函数对象,而在第二个例子中,我们使用了lambda表达式。在这两种情况下,比较函数决定了set中的元素顺序。
访问:只能用迭代器且受限
添加元素:没有pushback,用insert
用法:St.insert(x);
x是待插入的数字
复杂度:ologn
写了个实例
查找元素find():返回迭代器
让他查找的元素不存在是这样的:都返回3
其实不是。返回的是指向st。end()迭代器
所以,
判断元素有无
使用st.find(元素)==st.end()
删除:st.erase()
添加都是给值就行,删除需要迭代器(这个例外)
用迭代器删除
点删除
不存在的值不能删,如果让他删除.end迭代器就会出错
不然就好了
区间删除
这个不能使用it+2云云
但可以使用++
直接给值
这个可以给一个不存在的元素,他不删就行了。