STL初步排序与三大容器总结
- 一、排序与检索
- sort() #include<algorithm>
- sort(a,a+n)
对普通数组进行排序 - sort(v.begin() , v.end())
对存储在vector中的元素排序
- sort(a,a+n)
- lower_bound #include<algorithm>
- lower_bound(&First,&end,int value) 返回大于等于value值的第一个值的大小
传入起始位置,终止位置,查找的值, - 如果要返回位置,可以例如:int a[100]; int p = lower_bound(a,a+n,x) - a;
- lower_bound(&First,&end,int value) 返回大于等于value值的第一个值的大小
- sort() #include<algorithm>
- 二、不定长数组:vector
- vector就像一个二维数组,只是第一维的大小是固定的(maxn),而第二维的大小不固定
- 声明:vector<int>a[maxn]或者vector<double>a[maxn];
- a.size()
读取a的大小 - a.resize()
改变a的大小 - a.push_back()
在a的尾部添加一个元素 - a.pop_back()
删除最后一个元素 - a.clear()
清空元素且不回收内存 - a.empty()
判断a是否为空 - a.insert(&adress , value)
在指定位置插入数据,例如intsert(v.begin,3) - a.insert(&adress , amount , value)
在指定位置插入amount个value,例如insert(v.begin,5,3) 在容器的开头传入五个三 - a.front()
返回*a,begin()第一个元素 - a.back()
返回最后一个元素
- a.size()
- 声明:vector<int>a[maxn]或者vector<double>a[maxn];
- vector就像一个二维数组,只是第一维的大小是固定的(maxn),而第二维的大小不固定
- 三、集合:set
- set集合是c++ stl库中自带的一个容器,set中的元素都是排好序的,且set集合中没有重复的元素
- 声明:set<string>dict;
- begin()--返回指向第一个元素的迭代器
- front()--返回a.begin()第一个元素
- clear()--清除所有元素
- count()--返回某个值元素的个数
- insert()--在集合中插入元素
- empty()--如果集合为空,返回true
- end()--返回指向最后一个元素的迭代器
- erase()--删除集合中的元素
- find()--返回一个指向被查找到元素的迭代器
- size()--集合中元素的数目
- swap()--交换两个集合变量
- lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
- upper_bound()--返回大于某个值元素的迭代器
- 迭代器(以set为例)
- 声明:set<string>::iterator it = dict.begin();
- 使用:for(set<string>::iterator it = dict.begain; it != dict.end() ; ++it) ; cout<< *it << "\n";
- stringstream的用法
- #include<sstream>
- #include<sstream>
- 四、映射:map
- map有一个有趣的特征,可以用数组表示法(将键用作索引)来访问存储的值,例如,wordmap["the"]表示与键"the"相关联的值,这里是字符串"the"出现的次数,但你可以随意向其中赋值。
- 声明:map<string,int> cnt; map<string,int>::iterator iter;
- cnt.count("abc");
返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。 - cnt.insert(pair<string,int>("abc",2));
用insert函数插入 - cnt["asd"] = 5; cnt["qwe"] = 9;
用"array"的方式插入 - iter = cnt.find("asd");
- cnt.erase(iter);
- cnt.count("abc");