集合的知识

一、vector 类

1.指定vector基类型

    vector<int>    vector<char>     vector<string>
        尖括号内的类型称为基类型,包含基类型规格说明的类在面向对象中被称之为参数化的类,c++中参数化的类通常被称为模板

2. 声明vector对象及其操作

    vector<int> abc;
    从vector中选取元素可以采用和数组一样的方式
    对于vector引用调用(加一个 &)比默认复制调用更高效
    声明n个元素的vector:
        vector<int> abc(n);

二、set类

1 set定义

set的定义 <储存的类型> 容器名 如:储存int型的值 set<int> s;储存double型的值 set<double> s;储存string型的值 set<string> s;储存结构体或者类的值的值 set<结构体名> s;

2 set 基本函数

//常用函数(必学)
insert()//插入元素
count()//判断容器中是否存在某个元素
size()//返回容器的尺寸,也可以元素的个数
erase()//删除集合中某个元素
clear()//清空集合
empty()//判断是否为空
begin()//返回第一个节点的迭代器
end()//返回最后一个节点加1的迭代器
rbegin()//反向迭代器
rend()//反向迭代器

//功能函数(进阶)
find()//查找某个指定元素的迭代器
lower_bound()//二分查找第一个不小于某个值的元素的迭代器
get_allocator()//返回集合的分配器
swap()//交换两个集合的变量
max_size()//返回集合能容纳元素的最大限值

3 代码

#include<iostream>//c++标准头文件,可以使用cout,cin等标准编译用法
#include<set>//使用set需要带上这个文件
using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用
int main(){
    set<int> s;//定义 
    s.insert(1);//插入元素1 
    s.insert(3);//插入元素3
    s.insert(2);//插入元素2
    cout<<"现有的元素有"<<endl; 
    for(int c:s){//遍历set,注意set会将元素自动排序,插入的顺序是1、3、2,遍历的顺序是1、2、3 
        cout<<c<<' ';
    } 
    cout<<endl;
    cout<<endl;
    s.erase(3);//删除元素3
    
    cout<<"删除元素3后,现有的元素有"<<endl; 
    for(int c:s){//遍历set,注意set会将元素自动排序,插入的顺序是1、3、2,遍历的顺序是1、2、3 
        cout<<c<<' ';
    } 
    cout<<endl;
    cout<<endl;
    
    cout<<"现在s.size()=="; 
    cout<<s.size();
    cout<<",即有两个元素" ;
    cout<<endl;
    cout<<endl;
    
    cout<<"是否包含元素2:"<<endl;
    cout<<"s.count(2)=="<<s.count(2)<<"即包含元素2"; 
    cout<<endl;
    cout<<endl;
    cout<<"是否包含元素3:"<<endl;
    cout<<"s.count(3)=="<<s.count(3)<<"即不包含元素3"; 
    cout<<endl;
    cout<<endl;
    
    cout<<"s是否是空的:"<<endl;
    cout<<"s.empty()=="<<s.empty()<<"即s不为空"; 
    cout<<endl;
    cout<<endl;
    
    s.clear();//清空集合 
    
    cout<<"s是否是空的:"<<endl;
    cout<<"s.empty()=="<<s.empty()<<"即s是空的"; 
    cout<<endl;
    cout<<endl;
    
    
    cout<<"s是否是空的:"<<endl;
    cout<<"s.size()=="<<s.size()<<"即s是空的"; //s.size()==0也可以判断集合是否为空,为了考虑代码可读性,一般不用size()代替empty() 
    cout<<endl;
    cout<<endl;
} 

三、map类

1 map简介

map是STL的一个关联容器,以键值对存储的数据,其类型可以自己定义,每个关键字在map中只能出现一次,关键字不能修改,值可以修改;map同set、multiset、multimap(与map的差别仅在于multimap允许一个键对应多个值)内部数据结构都是红黑树,而java中的hashmap是以hash table实现的。所以map内部有序(自动排序,单词时按照字母序排序),查找时间复杂度为O(logn)。

2 代码

#include <iostream>  
#include <unordered_map>  
#include <map>
#include <string>  
using namespace std;  
int main()  
{  
    //注意:C++11才开始支持括号初始化
    unordered_map<int, string> myMap={{ 5, "张大" },{ 6, "李五" }};//使用{}赋值
    myMap[2] = "李四";  //使用[ ]进行单个插入,若已存在键值2,则赋值修改,若无则插入。
    myMap.insert(pair<int, string>(3, "陈二"));//使用insert和pair插入
  
    //遍历输出+迭代器的使用
    auto iter = myMap.begin();//auto自动识别为迭代器类型unordered_map<int,string>::iterator
    while (iter!= myMap.end())
    {  
        cout << iter->first << "," << iter->second << endl;  
        ++iter;  
    }  
    
    //查找元素并输出+迭代器的使用
    auto iterator = myMap.find(2);//find()返回一个指向2的迭代器
    if (iterator != myMap.end())
        cout << endl<< iterator->first << "," << iterator->second << endl;  
    system("pause");  
    return 0;  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值