- 关联式容器
- 插入数据自动排序 按照key
- insert 插入值
- erase 参数可以传值 或者 迭代器
- find() 返回值 迭代器 找不到返回的 end()
- count 计数 对于set而言 结果 就是 0 或者1
- lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器。
- upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器。
- equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。
- 对组 pair
- 第一个值 first
- 第二个值 second
- 默认括号
- make_pair()
- set插入返回值是 对组 < 迭代器, 是否成功标示>
- 指定set排序规则,利用仿函数
- set插入自定义数据类型
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #include <set> /* set构造函数 set<T> st;//set默认构造函数: mulitset<T> mst; //multiset默认构造函数: set(const set &st);//拷贝构造函数 set赋值操作 set& operator=(const set &st);//重载等号操作符 swap(st);//交换两个集合容器 set大小操作 size();//返回容器中元素的数目 empty();//判断容器是否为空 set插入和删除操作 insert(elem);//在容器中插入元素。 clear();//清除所有元素 erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器。 erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。 erase(elem);//删除容器中值为elem的元素。 set查找操作 find(key);//查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end(); count(key);//查找键key的元素个数 lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器。 upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器。 equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。 */ void printSet(set<int>& s) { for (set<int>::iterator it = s.begin(); it != s.end(); it++) { cout << *it << " "; } cout << endl; } void test01() { //构造 set<int>s1; //关联式容器, 插入数据 key自动按从小到大排序 s1.insert(5); s1.insert(1); s1.insert(9); s1.insert(7); s1.insert(3); printSet(s1); //1 3 5 7 9 //按迭代器位置删除 s1.erase(s1.begin()); printSet(s1); //3 5 7 9 s1.erase(3); //按元素删除 printSet(s1); //5 7 9 } //查找操作 void test02() { set<int>s1; s1.insert(5); s1.insert(1); s1.insert(9); s1.insert(7); s1.insert(3); //对于set 没有value key就是value set<int>::iterator it = s1.find(3); //查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end(); if (it != s1.end()) //3 { cout << *it << endl; } else { cout << "未找到" << endl; } set<int>::iterator it2 = s1.find(2); if (it2 != s1.end()) //未找到 如果不判断 没找到的时候会报错 { cout << *it2 << endl; } else { cout << "未找到" << endl; } //lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器。 set<int>::iterator it3 = s1.lower_bound(3); if (it3 != s1.end()) //3 { cout << *it3 << endl; } else { cout << "未找到" << endl; } //upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器。 set<int>::iterator it4 = s1.lower_bound(4); if (it4 != s1.end()) //5 { cout << *it4 << endl; } else { cout << "未找到" << endl; } //equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。 pair<set<int>::iterator, set<int>::iterator> ret = s1.equal_range(3); //获取第一个值 cout << *(ret.first) << endl; //3 cout << *(ret.second) << endl; //5 //count(key); //查找key的元素个数 set只会是0或1 因为set不存在重复的key int num = s1.count(1); cout << num << endl; //1 } int main() { test02(); //test01(); system("Pause"); return 0; }
结果: