Set 和 multiset 特点
- set中元素插入过程是按排序规则插入,所以不能指定插入位置。
- set不可以直接存取元素。(不可以使用at.(pos)与[]操作符)。
- multiset与set的区别:set支持唯一键值,每个元素值只能出现一次;而multiset中同一值可以出现多次。
- 不可以直接修改set或multiset容器中的元素值,因为该类容器是自动排序的。如果希望修改一个元素值,必须先删除原有的元素,再插入新的元素
- 头文件
#include <set>
using namespace std; //set容器在命名空间std中
参考程序如下:
#include <iostream>
#include <functional>
#include <algorithm>
#include <set>using namespace std;//set与multset的主要区别
void demo() {set<int> sInt;multiset<int> mInt;for (int i = 0; i < 10; i++) {sInt.insert(100 - i);mInt.insert(100 - i);}//sInt.insert(99); //set无法插入相同元素//multiset支持插入多个相同元素mInt.insert(99);set<int>::iterator it = sInt.begin();for (; it != sInt.end(); it++) {cout << *it << " ";}cout << endl;multiset<int>::iterator itm = mInt.begin();for (; itm != mInt.end(); itm++) {cout << *itm << " ";}cout << endl;
}//less greater 函数对象实现比较 作为排序依据
void demo1(){cout << endl << "less<> greater<> 函数对象实现比较 作为排序依据" << endl;//set< ,less< >> 无论输入的数据是从小到大还是输入的数据是从大到小//都从小到大遍历出来 set<int>默认情况下set<int, less<int>>set<int, less<int>>st1;for (int i = 10; i > 0; i--) {st1.insert(i * 10 + 1);}set<int, less<int>>::iterator itl = st1.begin();for (; itl != st1.end(); itl++) {cout << *itl << " ";}cout << endl;//set< ,greater< >> 无论输入的数据是从小到大还是输入的数据是从大到小//都从大到小遍历出来set<int, greater<int>>stg;for (int i = 1; i <10; i++) {stg.insert(i * 10 + 1);}set<int, greater<int>>::iterator itg = stg.begin();for (; itg != stg.end(); itg++) {cout << *itg << " ";}cout << endl;
}int main() {demo();demo1();system("pause");return 0;
}