引入—迭代器
- 1,
.end()
返回的不是最后一个元素的位置,是最后一个元素后的空间,是不能取出的 - 2,迭代器是指针,支持解引用和
++ --
操作 - 3,参考:c++指针详解
一,pair双元组
解释:pair类型包含了两个数据值,类似于打包在一起的数据双元组
1,构造
pair<T1, T2> p;
定义了一个空的pair对象p
pair<T1, T2> p(v1, v2);
定义了包含初始值为v1和v2的pair对象p
make_pair(v1, v2)
以v1和v2值创建的一个新的pair对象
2,提取值
p.first p.second
tips: 你也可以借助define简化提取
#define x first #define y second
p.x p.y
二,map(内部有序)
解释:map以键-值(
k
e
y
−
v
a
l
u
e
key-value
key−value)存储的数据类型,键就是索引,可以理解成知道key 就可以索引到 value,是一种哈希
操作:
C++ maps是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数, (帮助评论区理解: 因为key值不会重复,所以只能是1 or 0)
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
三、nth_element
nth_element,这个函数主要用来将数组元素中第k小的整数排出来并在数组中就位,随时调用,可谓十分实用。
函数语句:nth_element(数组名,数组名+第k小元素,数组名+元素个数)
long long n,k,a[5000010];
int main()
{
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
nth_element(a,a+k,a+n);
cout<<a[k];
}
cout << "int 最大值:" << INT_MAX << '\n';
cout << "int 最小值:" << INT_MIN << '\n';
cout << "float 最大值:" << FLT_MAX << '\n';
cout << "float 最小值:" << FLT_MIN << '\n';
cout << "double 最大值:" << DBL_MAX << '\n';
cout << "double 最小值:" << DBL_MIN << '\n';
cout << "long 最大值:" << LONG_MAX << '\n';
cout << "long 最小值:" << LONG_MIN << '\n';
cout << "long long 最大值:" << LONG_LONG_MAX << '\n';
cout << "long long 最小值:" << LONG_LONG_MIN << '\n';
cout << "unsigned long long 最大值:" << ULONG_LONG_MAX << '\n';
四,set(有序平衡树)
参考资料:set 详解
顺序:内部顺序遍历为从小到大
迭代器获取:
s
e
t
<
i
n
t
>
:
:
i
t
e
r
a
t
o
r
set<int>::iterator
set<int>::iterator
i
t
1
,
i
t
2
it1,it2
it1,it2
if (!s.insert(t).second) cout << "Already Exist\n"; set中的元素不重复,insert后返回一个二元组,first表示插入后的位置,second为成功与否
set.empty() 可以直接返回集合是否为空。
set.lower_bound(x) 是返回第一个大于等于 x 的位置,
set.upper_bound(x) 是返回最后一个大于等于 x 的位置。 个人感觉这个没什么用……
set.find(x) 会返回第一个 x 的位置。如果没有 x,则会返回 set.end()。
set.erase(iterator),删除定位器 iterator 指向的值
set.erase(first,second),删除定位器 first 和 second 之间的值
set.erase(key_value),删除键值 key_value 的值
常用和技巧:假装插入某不存在元素,取得他的前一个指针为第一个小于他的,后一个为第一个大于他的