3.8 set/ multiset容器
两个的头文件包含set即可
插入数值只有insert方法
不允许重复
#include<iostream> #include<set> #include<string> using namespace std; // set容器的构造和赋值的操作 void test01() { set<int> s; // 插入数据只有insert方式 s.insert(10); s.insert(70); s.insert(30); s.insert(40); // 插入数据的时候会自动排序 set<int> s2(s); // 拷贝构造 set<int> s3; s3 = s2; // 赋值 } int main() { test01(); return 0; }
不能resize
除了用迭代器的方式删,也可以直接传入元素删除
注意删除是根据排序后的结果进行删除
查找:find 返回的是迭代器,不存在返回的是end
统计:count 统计元素个数
set容器count无非是0和1,multiset可能会大于1
set插入时候会返回结果,表示是否插入成功,返回的是pair的东西
#include<iostream> #include<set> #include<string> using namespace std; // set容器的构造和赋值的操作 void test01() { set<int> s; pair<set<int>::iterator, bool> ret = s.insert(10); if (ret.second) // 第二个数是bool类型的, pair数据的访问用first和second { cout << "第一次插入成功" << endl; } else { cout << "第一次插入失败" << endl; } // multiset允许插入重复值,插入的时候直接返回迭代器,不会返回是否成功 } int main() { test01(); return 0; }
#include<iostream> #include<set> #include<string> using namespace std; // pair对组的创建 void test01() { // 第一种 pair<string, int> p("Tom", 20); cout << p.first << p.second << endl; // 第二种 pair<string, int> p2 = make_pair < "Jerry", 30); cout << p2.first << p2.second << endl; } int main() { test01(); return 0; }
创建容器的时候就要指定排序方式
利用仿函数指定
自定义数据类型都会指定排序规则,否则编译器不知道怎么排