set是集合,虽然也存在键值和实值,不过两者根本就是同一个值,键值的设置完全就是为了满足红黑树的底层结构,set操作与map很像不过也有些不同。
1、 set迭代器与map的不同:
(1)set使用接引用运算符*取值,而map使用first和second取值。
(2)set的迭代器都是常量迭代器,不能用来修改所指向的元素,而map的迭代器是可以修改所指向元素的。
2、set没有重载[]运算符,而map中重载了,因为直接使用[]改变元素值会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素
3、构造的类型不一样,如同样实值为int类型分别为set<int>和map<type,int>(其中type可以为任意类型)
其他如插入、删除、查找等操作与map几乎一样
1 #include<iostream> 2 #include<set> 3 using namespace std; 4 void print(set<int>set_int) 5 { 6 set<int>::iterator it=set_int.begin(); 7 for(;it!=set_int.end();it++) 8 { 9 cout<<*it<<' '; 10 } 11 cout<<endl; 12 13 } 14 int main() 15 { 16 int num[4]={1,2,3,4}; 17 set<int> set_int(num,num+4); 18 19 //元素插入: 20 //1,插入value,返回pair配对对象,可以根据.second判断是否插入成功。(提示:value不能与set容器内元素重复) 21 //pair<iterator, bool> insert(value) 22 //2,在pos位置之前插入value,返回新元素位置,但不一定能插入成功 23 //iterator insert(&pos, value) 24 //3,将迭代区间[&first, &last)内所有的元素,插入到set容器 25 //void insert[&first, &last) 26 set_int.insert(5); 27 print(set_int); 28 set_int.insert(5); 29 print(set_int); 30 31 //元素删除 32 //1,size_type erase(value) 移除set容器内元素值为value的所有元素,返回移除的元素个数 33 //2,void erase(&pos) 移除pos位置上的元素,无返回值 34 //3,void erase(&first, &last) 移除迭代区间[&first, &last)内的元素,无返回值 35 //4,void clear(), 移除set容器内所有元素 36 set_int.erase(3); 37 print(set_int); 38 39 //元素查找 40 //count(value)返回set对象内元素值为value的元素个数 41 //iterator find(value)返回value所在位置,找不到value将返回end() 42 //lower_bound(value),upper_bound(value), equal_range(value) 43 set<int>::iterator it; 44 it=set_int.find(5); 45 cout<<*it<<endl; 46 return 0; 47 }