STL对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。
顺序性容器:vector、list、deque
关联性容器:set、multiset、map、multimap
容器适配器:stack、queue、priority_queue
本篇主要总结关联性容器:
(btw:获取迭代器的方法:建对象方式::iterator iter; //例:map
1.set:
set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset。
(1)初始化set对象的方式:
set
set
int a[5] = {1,2,3,4,5};set
set
(2)set常用函数:
s.begin() 返回set容器的第一个元素
s.end() 返回set容器的最后一个元素
s.clear() 删除set容器中的所有的元素
s.empty() 判断set容器是否为空
s.insert() 插入一个元素
s.erase() 删除一个元素
s.size() 返回当前set容器中的元素个数
s.count() 返回某个值元素的个数
equal_range() 返回第一个>=关键字的迭代器和>关键字的迭代器
语法:
pair
//key是用于排序的关键字Set
例如:
Pair
那么*p.first==2;*p.second==3;
erase() 删除集合中的元素
语法:
iterator erase( iterator i ); //删除i位置元素
iterator erase( iterator start, iterator end );
//删除从start开始到end(end为第一个不被删除的值)结束的元素size_type erase( const key_type &key );
//删除等于key值的所有元素(返回被删除的元素的个数)
//前两个返回第一个不被删除的双向定位器,不存在返回末尾
//第三个返回删除个数
find() 返回一个指向被查找到元素的迭代器
语法:
iterator find( const key_type &key );
//查找等于key值的元素,并返回指向该元素的迭代器;
//如果没有找到,返回指向集合最后一个元素的迭代器
lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
upper_bound()--返回大于某个值元素的迭代器
value_comp()--返回一个用于比较元素间的值的函数
2.multiset
set和multiset会根据特定的排序准则,自动将元素进行排序。不同的是后者允许元素重复而前者不允许。multiset和set用法基本一致。
3.map
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,使用的是一个包含键和值的pair的对象。由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。
(1)初始化map对象的方式:
map
map
map
map
(2)map常用函数
四种插入数据的方法:
1.insert(pair
2.insert(map<int, string>::value_type (1, "student_one")); // 用insert函数插入value_type数据
3. map<char, string>,char c='1',mp[c]="student_one" //用数组方式插入数据
4.map.insert(make_pair(1, "student_one")); //在insert函数中使用make_pair()函数
begin():返回容器第一个元素的迭代器
end():返回容器最后一个元素之后的迭代器
rbegin():返回一个指向map尾部的逆向迭代器
rend(): 返回一个指向map头部的逆向迭代器
clera():清除容器中所有元素
empty():判断容器是否为空
size():返回容器中元素的个数
count(k):返回指定键等于k的数据的出现的次数
find(k) :如果m中存在按k索引的元素,则返回指向该元素的迭代器。如果不存在,则返回结束游标end()
get_allocator():返回map的配置器
swap():交换两个map容器的元素
erase(k); // 删除m中键为k的元素,返回size_type类型的值,表示删除元素的个数。erase(iterator first, iterator last); // 删除一个范围,返回void类型。
4.multimap
multimap中的键也是按照构造函数中所指定的二元谓词进行排序的。
multimap的元素类型和map是一致的,这里就不再赘述。
这里就简要概述一下multimap和map不同的地方:multimap中相同的键可以多次出现,而不像map只能出现一次。 在multimap中没有定义[]运算符,当然也没有定义at()成员函数,因此,multimap进行插入的时候,只能利用insert()函数进行插入。
访问一个键的区间的三种方式
(1)通过其实点和数量来访问,即find(k)和count(k)
multimap
int num=m.count("Jack");
it = m.find("Jack");
cout<<"the search result is :"<
for(int i=1;i<=num;i++)
{
cout<<(*it).first<<" "<<(*it).second<
it++;
}
(2)通过起始点和结束点,即lowerbound()和upper_bound()
(3)equal_range();
pair
//first为lower_bound(k);大于等于k的第一个元素位置
//second为upper_bound();大于k的第一个元素位置
第一篇:C++的STL容器之顺序性容器vector、list、deque
链接:https://blog.csdn.net/baodream/article/details/79719091
第三篇:C++的STL容器之关联性容器stack、queue、priority_queue
链接: https://blog.csdn.net/baodream/article/details/79732680