动态数组 vector和关联式容器map

简介: 动态数组 vector和关联式容器map

为了节省空间,有时我们会使用动态数组vector。

定义vector动态数组:vector<类型名>变量名

1. vector<int>que   //定义que为一个int类型的动态数组
2. vector<char> a   //定义 a 为一个char 类型的动态数组
3. vector<data> c    //其中data为自定义的数据类型,可以为结构体

vector常用函数

a[i]                     返回动态数组中的第i个元素

a.empty()           若动态数组为空,则返回true,否则返回false

a.size()              返回动态数组中元素的个数

a.resize()           修改动态数组大小

a.push_back()   向动态数组尾部插入一个元素

a.pop_back()     删除动态数组尾部的一个元素

a.begin()            返回指向vector头部的迭代器(指针)

a.end()               返回指向vector尾部元素的后一个元素的迭代器(指针)

利用vector动态数组实现的排序代码:

1. #include<stdio.h>
2. #include<vector>
3. #include<queue>
4. #include<algorithm>
5. #include<iostream>
6. using namespace std;
7. int main()
8. {
9.  vector<int>a;
10.   int n;
11.   scanf("%d",&n);
12.   for(int i=1;i<=n;i++){
13.     int tmp;
14.     scanf("%d",&tmp);
15.     a.push_back(tmp);
16.   } 
17.   sort(a.begin(),a.end());
18.   for(int i=0;i<a.size();i++) printf("%d ",a[i]);
19.   printf("\n");
20.   return 0;
21.  }

在实际应用中,我们可以使用map容器来作为一个有序的映射表,可以将其看做是一个下标可以是任何类型的数组。对map单次操作的时间复杂度为O(lgn)。

定义map:       map<类型1,类型2>变量名;    

map<string,int> ma;           //定义ma为一个从string到int的一个映射

访问map中的元素

1. map<string,int> ma;    //定义ma     
2. ma[“abc”]=2;            //将字符串”abc”映射到整数”2”上     
3. cout<<ma[“abc”]<<endl;   //屏幕上将输出整数2    
4. //同时,map中的类型可以是自己定义的结构体,此时结构体中应该有重载小于符号。

map的常用函数

operator[]      访问map中的元素,该元素不存在,将创建一个新元素并将该元素映射到类型2的初始值上(对于int类型,初始值为0)

ma.begin()    返回map中第一个元素的迭代器(指针)

ma.end()       返回map中最后一个元素的后一个元素的迭代器(指针)

ma.size()       返回map中元素个数

ma.count(element)      若元素element存在于map中返回1,否则返回0

ma.clear()                    初始化map

ma.lower_bound()       返回键值大于等于给定元素的第一个位置

注意:一旦map中的一个元素被访问,不论它之前是否已经被赋值,它都将被视为已经存在,例如:

1. if(ma[“abc”]) /*do something*/ ;  
2. if(ma.count(“abc”))cout<<”yes”<<endl;    
3. else cout<<”no”<<endl;//本段程序运行后屏幕上将输出”yes
1. #include<stdio.h>
2. #include<map>
3. #include<iostream>
4. using namespace std;
5. map<string,int>ma;
6. int main()
7. {
8.  ma["apple"]=1;
9.  ma["banana"]=2;
10.   ma["lemon"]=3;
11.   cout<<ma.size()<<endl;//输出map的大小3 
12.   cout<<ma["apple"]<<endl;//输出1 
13.   if(ma.count("pear"))cout<<"pear"<<endl;
14.   else cout<<"no pear"<<endl;//输出"no pear"
15.   cout<<ma.lower_bound("cow")->first<<endl;//输出"lemon"
16.   cout<<ma.lower_bound("cow")->second<<endl;//输出ma["lemon"],即输出3
17.   return 0;
18.  }

 

相关文章
|
4月前
|
存储 C++ 容器
如何将没有复制或移动构造函数的对象放入vector容器
如何将没有复制或移动构造函数的对象放入vector容器
41 0
|
5月前
|
存储 C++ 索引
|
6月前
|
C++ 容器
C++之评委打分案例(vector与deque容器练习)
C++之评委打分案例(vector与deque容器练习)
|
6月前
|
存储 算法 C++
【C++/STL】:vector容器的基本使用
【C++/STL】:vector容器的基本使用
42 1
|
6月前
|
存储 算法 NoSQL
C++一分钟之-map与set容器详解
【6月更文挑战第21天】C++ STL的`map`和`set`是基于红黑树的关联容器,提供有序存储和高效查找。`map`存储键值对,键唯一,值可重复;`set`仅存储唯一键。两者操作时间复杂度为O(log n)。常见问题包括键的唯一性和迭代器稳定性。自定义比较函数可用于定制排序规则,内存管理需注意适时释放。理解和善用这些工具能提升代码效率。
67 3
|
5月前
|
存储 安全 C++
|
5月前
|
存储 算法 C++
【C++】详解STL容器之一的 vector
【C++】详解STL容器之一的 vector
|
6月前
|
C++ 容器
C++ STL标准库 《map容器详解》
C++ STL标准库 《map容器详解》
45 0
|
6月前
|
存储 C++ 容器
C++ STL标准库 《map容器详解》
C++ STL标准库 《map容器详解》
76 0
|
6月前
|
C++ 容器
C++之map/multimap容器
C++之map/multimap容器
下一篇
无影云桌面