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;
}