C++ STL专题的诸多函数

一、头文件#include
这个头函数为算法头文件,下面介绍算法中的几个基本函数

  1. sort函数
    这个函数是一个排序函数,方法用于对数组的元素进行排序,并返回数组。
    主要用法如下:sort(begin, end,排序方式)如果未填写排序方式,默认从小到大排序。
    倘若想要从大到小排序:sort(begin, end, cmp);
    它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高,极大方便了我们的代码。
    下面为大家附加一个代码:
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
	int a[10];
	vector <int> b;
	for (int i = 0; i < 5; i++)
	{
		cin >> a[i];
		b.push_back(a[i]);
	}
	sort(a, a + 5);
	sort(b.begin(), b.end());
	for (int i = 0; i < 5; i++)
		cout << a[i] << " ";
	cout << endl;
	for (int i = 0; i < 5; i++)
		cout << b[i] << " ";
	return 0;
}

上述代码,可以输入在int范围内任意5个数字,程序会自动从小到大进行排序后输出。

  1. 以及四个常用函数
    ①bool next_permutation(begin, end);
    改变区间内元素的顺序,产生下一个排列。
    ②bool prev_permutation(begin, end);
    产生前一个排列。end为最后一个元素的下一个位置。
    ③upper_bound(begin, end, value);
    返回>value的元素的第一个位置。
    ④lower_bound(begin, end, value);
    返回>=value的元素的第一个位置。

上述四个函数都要注意在begin与end之间,都是左闭右开的区间形式,都在数组中进行运用。

二、头文件: #include
set 和 multiset会根据特定的排序准则,自动将元素排序,两者的不同之处在于multiset可以允许元素重复而set不允许元素重复。

set如同在高中数学对于集合的定义,不允许重复的数字出现,如果在一个数组中出现了多个相同的数字,set函数会自动排序清除相同元素(set的功能会经常运用在除重的题目中)

multiset与set函数不同,进行排序后不会清楚数组中的相同元素,如果希望保留相同元素,可以进行运用。

定义:set <data_type> set_name;
如:set s;//默认由小到大排序
如果想按照自己的方式排序,可以重载小于号、

set和multiset 简单应用
操作:
s.insert(elem) – 安插一个elem副本,返回新元素位置。
s.erase(elem) – 移除与elem元素相等的所有元素,返回被移除 的元素个数。
s.erase(pos) – 移除迭代器pos所指位置上的元素,无返回值。
s.clear() – 移除全部元素,将整个容器清空。
s.size() – 返回容器大小。
s.empty() – 返回容器是否为空。
s.count(elem) – 返回元素值为elem的元素的个数。
s.lower_bound(elem) – 返回 元素值>= elem的第一个元素位置。
s.upper_bound(elem) – 返回元素值 > elem的第一个元素的位置。
以上位置均为一个迭代器。
s.begin() – 返回一个双向迭代器,指向第一个元素。
s.end() – 返回一个双向迭代器,指向最后一个元素的下一个位置。
迭代器举例:
multiset :: iterator pos;
for(pos = s.begin(); pos != s.end(); pos++)

三、头文件: #include
定义:map <data_type1, data_type2> map_name;
如:map <string, int> m;//默认按string由小到大排序

m.size() 返回容器大小
m.empty() 返回容器是否为空
m.count(key) 返回键值等于key的元素的个数
m.lower_bound(key) 返回键值等于key的元素的第一个可安插 的位置
m.upper_bound(key) 返回键值等于key的元素的最后一个可安 插的位置
m.begin() 返回一个双向迭代器,指向第一个元素。
m.end() 返回一个双向迭代器,指向最后一个元素的下一个 位置。
m.clear() 讲整个容器清空。
m.erase(elem) 移除键值为elem的所有元素,返回个数,对 于map来说非0即1。
m.erase(pos) 移除迭代器pos所指位置上的元素。
直接元素存取:
m[key] = value;

查找的时候如果没有键值为key的元素,则安插一个键值为key的新元素,实值为默认(一般0)。
m.insert(elem) 插入一个元素elem
a)运用value_type插入
map<string, float> m;
m.insert(map<string, float>:: value_type (“Robin”, 22.3));
b) 运用pair<>
m.insert(pair<string, float>(“Robin”, 22.3));
c) 运用make_pair()
m.insert(make_pair(“Robin”, 22.3));

四、在queue中存在一个新的函数
优先队列(priority_queue)
一个拥有权值观念的queue,自动依照元素的权值排列,权值最高排在前面。缺省情况下,priority_queue是利用一个max_heap完成的。
在这里插入图片描述

定义:priority_queue <data_type> priority_queue_name;
如:priority_queue q;//默认是大顶堆
操作:
q.push(elem) 将元素elem置入优先队列
q.top() 返回优先队列的下一个元素
q.pop() 移除一个元素
q.size() 返回队列中元素的个数
q.empty() 返回优先队列是否为空

在优先队列中最要注意的是,在优先队中,不一定是单调的!但是可以在短时间内找到队列中最大数值或者最小数值。

发布了90 篇原创文章 · 获赞 15 · 访问量 3166

猜你喜欢

转载自blog.csdn.net/qq_43656233/article/details/88143871
今日推荐