set是集合 集合么 顾名思义 只要是元素在集合里面 他就是自动就变成有序了和唯一了,也就是里面没有重复的元素
那么常用的成员函数都有什么呢?
1. begin()--返回指向第一个元素的迭代器
2. clear()--清除所有元素
3. count()--返回某个值元素的个数
4. empty()--如果集合为空,返回true
5. end()--返回指向最后一个元素的迭代器
6. equal_range()--返回集合中与给定值相等的上下限的两个迭代器
7. erase()--删除集合中的元素
8. find()--返回一个指向被查找到元素的迭代器
9. get_allocator()--返回集合的分配器
10. insert()--在集合中插入元素
11. lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
12. key_comp()--返回一个用于元素间值比较的函数
13. max_size()--返回集合能容纳的元素的最大限值
14. rbegin()--返回指向集合中最后一个元素的反向迭代器
15. rend()--返回指向集合中第一个元素的反向迭代器
16. size()--集合中元素的数目
17. swap()--交换两个集合变量
18. upper_bound()--返回大于某个值元素的迭代器
19. value_comp()--返回一个用于比较元素间的值的函数
用法 和前面的那些相同 详情可以看我前两篇文章 multiset 和set 类似,但是是可以存在多个值
下面来介绍一下 map
介绍map之前 需要先介绍一下 pair
pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同。如果一个函数有两个返回值的话,如果是相同类型,就可以用数组返回,如果是不同类型,就可以自己写个struct ,但为了方便就可以使用 c++自带的pair ,返回一个pair,其中带有两个值。除了返回值的应用,在一个对象有多个属性的时候 ,一般自己写一个struct ,如果就是两个属性的话,就可以用pair 进行操作。pair 可以省的自己写一个struct .如果有三个属性的话,其实也是可以用的pair 的 ,极端的写法 pair <int ,pair<int ,int > >写法极端。(后边的两个 > > 要有空格,否则就会是 >>位移运算符)
eg: pair<const int,string> item(213,"goupibushi") 这样就创建了一个对象item 里面包含两个信息 213 和 字符串"goupibushi"
那么为什么要介绍pair呢 不是介绍map么?
当然了 因为 map 是一种一对一的容器,也就是一个值对应一个值,像上面的213对应且唯一对应字符串"goupibushi"
map和set一样 他们都是有序且唯一的容器
map <int, string> m1 = {{ 3, "guangzhou" }, { 2, "shenzhen" }, { 1, "changsha" } };//实例化一个map容器,内含三组数据
begin() 返回指向map头部的迭代器 clear() 删除所有元素 count() 返回指定元素出现的次数 empty() 如果map为空则返回true end() 返回指向map末尾的下一个迭代器 erase() 删除一个元素 find() 查找一个元素 insert() 插入元素 max_size() 返回可以容纳的最大元素个数 size() 返回map中元素的个数 swap() 交换两个map rbegin() 反向迭代器,指向最后一个迭代器 rend() 指向map头结点的前一个迭代器
multimap 就是一个有序的但不唯一的容器
但是在这里我要强调一下这个equal_range(const T&x)函数 这个函数返回两个迭代器,代表值为x的第一个迭代器和最后一个迭代器
#include <iostream>
#include <map>
int main ()
{
std::multimap<char,int> my_multimap;
my_multimap.insert(std::make_pair('a',10));
my_multimap.insert(std::make_pair('a',20));
my_multimap.insert(std::make_pair('a',30));
my_multimap.insert(std::make_pair('a',40));
my_multimap.insert(std::make_pair('b',10));
my_multimap.insert(std::make_pair('c',10));
my_multimap.insert(std::make_pair('c',20));
std::pair<std::multimap<char,int>::iterator,std::multimap<char,int>::iterator> ret;
ret=my_multimap.equal_range('a');
for(std::multimap<char,int>::iterator it=ret.first;it !=ret.second;it++){
std::cout << it->first << " => " << it->second << '\n';
}
return 0;
}
代码是转载的哈- -
这里最后一个for我看了好久 因为ret代表两个迭代器 虽然是两个迭代器 但是代表的确是 map中第一个等于和最后一个等于a的两个迭代器 ,可能里面等于 a的数量有好多