1.set容器的相关函数
set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列。
set容器
包含头文件:
#include<set>
set中只能用insert函数实现数据的输入。
set<int> se;
se.insert(1);
查找函数find的使用:
查找key是否存在,若存在,返回该键的元素的迭代器,若不存在,返回set.end();
set<int> se;
se.insert(1);
se.insert(2);
if (se.find(3) == se.end()) {
cout << "NO" << endl;
}
swap函数:交换两个集合容器
#include <iostream>
#include<set>
using namespace std;
int main()
{
set<int> se;
se.insert(1);
se.insert(2);
set<int> sk;
sk.insert(4);
sk.insert(3);
for (auto it = se.begin(); it != se.end(); it++) {
cout << *it << " ";
}
for (auto it = sk.begin(); it != sk.end(); it++) {
cout << *it << " ";
}
cout << endl;
se.swap(sk);
for (auto it = se.begin(); it != se.end(); it++) {
cout << *it << " ";
}
for (auto it = sk.begin(); it != sk.end(); it++) {
cout << *it << " ";
}
return 0;
}
erase函数:
erase(pos):删除pos迭代器所指的元素,返回下一个元素的迭代器(删小的)
erase(elem):删除容器中值为elem的元素
erase(beg,end):删除区间(beg(),end())的所有元素,返回下一个元素的迭代器
#include <iostream>
#include<set>
using namespace std;
int main()
{
set<int> se;
se.insert(1);
se.insert(2);
se.insert(7);
se.insert(3);
auto temp=se.erase(se.begin());
cout << *temp << endl;
se.erase(2);
for (auto it = se.begin(); it != se.end(); it++) {
cout << *it << " ";
}
return 0;
}
count函数:统计key的元素个数(0或者1)
#include <iostream>
#include<set>
using namespace std;
int main()
{
set<int> se;
se.insert(1);
se.insert(2);
se.insert(7);
se.insert(3);
cout << se.count(2) << endl;
cout << se.count(9) << endl;
return 0;
}
size():判断容器中元素的数目
empty():判断容器是否为空
clear():清除所有元素
2.multiset,set自定义排序:
#include <iostream>
#include<set>
using namespace std;
struct rec {
int x, y;
};
struct cmp {
bool operator()(const rec& a, const rec& b)const {
return a.x > b.x;
}
};
class temp {
public:
bool operator()(const rec& a, const rec& b)const {
return a.x > b.x;
}
};
set<rec, temp>h;
//set<rec, cmp>h; 使用这两个都可以
int main()
{
rec r1;
r1.x = 1;
r1.y = 2;
rec r2;
r2.x = 3;
r2.y = 4;
h.insert(r1);
h.insert(r2);
for (auto it = h.begin(); it != h.end(); it++) {
cout << (*it).x << " ";
}
return 0;
}
3.C++错误C3848:具有类型“const MyCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool MyCompare::operator ()(int,int)
在Visual Studio 2019练习C++中map容器时,自定义排序函数
//仿函数
class MyCompare
{
public:
//重载
bool operator()(int v1, int v2)
{
return v1 > v2;
}
};
解决方案:
在仿函数中加入const
class MyCompare
{
public:
//重载
bool operator()(int v1, int v2)const
{
return v1 > v2;
}
};
4.int的范围:
int的取值范围为-2147483648~2147483647()
也就是说输入数据在0-10的九次方不用考虑输入溢出,用int就行
5.如何输出%
#include <iostream>
using namespace std;
int main()
{
printf("100%%");
return 0;
}