ACM STL学习

sort的排序在algorithm头文件里,默认是从小到大排序,若要实现从大到小排序,可以写个函数实现,简单来说,return x<y;
生成排列:

头文件: #include <algorithm
bool next_permutation(begin, end);
改变区间内元素的顺序,产生下一个排列。
bool prev_permutation(begin, end);
产生前一个排列。
end为最后一个元素的下一个位置

upper_bound(begin, end, value);
返回>value的元素的第一个位置。
lower_bound(begin, end, value);
返回>=value的元素的第一个位置。
num[] = {1,2,2,3,4,5};
lower_bound(num, num + 6, 2)为num + 1
upper_bound(num, num + 6, 2)为num + 3

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
    int a[10] = {1,3,5,2,4,6,7,5,2,5};
    sort(a, a + 10);
    for (int i = 0; i < 10; ++i){
        cout<<a[i]<<“ “;
    }
	int *s, *e;
    s = lower_bound(a, a + 10, 5);
    e = upper_bound(a, a + 10, 5);
    cout<<s – a<<“\t”<< e - a;
    while(s != e){
        cout<<*s++<<“ “;
    }
    return 0;
}

set 和 multiset会根据特定的排序准则,自动将元素排序,两者的不同之处在于multiset可以允许元素重复而set不允许元素重复
头文件: #include
定义:set <data_type> set_name;
如:set s;//默认由小到大排序

如果想按照自己的方式排序,可以重载小于号。
struct new_type{
	int x, y;
	bool operator < (const new_type &a)const{
		if(x != a.x) return x < a.x;
		return y < a.y;
	}
}
set <new_type> s;

操作:
s.insert(elem) – 安插一个elem副本,返回新元素位置。
s.erase(elem) – 移除与elem元素相等的所有元素,返回被移除 的元素个数。
s.erase(pos) – 移除迭代器pos所指位置上的元素,无返回值。
s.clear() – 移除全部元素,将整个容器清空。

迭代器举例:
multiset :: iterator pos;
for(pos = s.begin(); pos != s.end(); pos++)
… …
#include
#include
#include
using namespace std;
int main(){
sets1;
set::iterator iter1;
s1.insert(“abc”);
s1.insert(“abc”);
s1.insert(“abc”);
s1.insert(“bca”);
s1.insert(“aaa”);
cout << “ITERATE:” << endl;
for (iter1 = s1.begin(); iter1 != s1.end(); iter1++){
cout << (*iter1) << endl;
}
cout << “FIND:” << endl;
iter1 = s1.find(“abc”);
if(iter1 != s1.end()) {
cout << *iter1 << endl;
}else{
cout << “NOT FOUND” << endl;
}
return 0;
}
map和multimap:
所有元素都会根据元素的键值自动排序,map的所有元素都是pair,pair的第一个元素被视为键值,第二个元素为实值。map不允许两个元素有相同的键值,但multimap可以。
头文件: #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的元素的最后一个可安 插的位置

猜你喜欢

转载自blog.csdn.net/weixin_43238423/article/details/88082990