非线性数据结构

非线性数据结构

set集合
①有序不重复 set ②有序可重复 multiset ③无序不重复 unordered_set
④无序可重复 unordered_multiset
有序省内存 无序省时间

//头文件
#include 
#include 
//构造
set<int> set1={1,2,3};//有序不重复
multiset<int> set2={1,2,3,3,3};//有序可重复
unordered_set<int> set3={1,2,3,4};
unordered_multiset<int> set3={1,2,3,4};
//遍历集合
unordered_multiset<int>::iterator it;

//新增元素
set1.insert(4);
//删除元素
set1.erase(1);
set2.erase(3);
//find查找元素的位置 找不到返回尾后迭代器
if(set3.find(1)==set3.end()){
}
else{
}
//count获取元素的数量
//set元素不允许修改 可以先删除再插入

map词典
数组下标必须是整数
map里面下标可以是任意类型 通过下标访问元素 下标和元素都可以是任意类型 下标成为键 元素称为值 pair/键值对
map本质上是一个集合

#include 
#include 
#include 

using namespace std;
int main(){
   /* //构造map
    map map1;//有序 不允许键重复
    //char 是键的类型  int 是值的类型
    multimap map2;//有序 允许重复
    unordered_map map3;//无序 不允许重复
    unordered_multimap map4;//无序 允许重复

    pair pair1={'w',0};
    printf("key=%c,value=%d\n",pair1.first,pair1.second);
    map1.insert(pair1);
    map1.insert({'w',2});
    //删除 map只删除一个 multimap 同时删除多个键相等的
    map1.erase('w');
    */
   //遍历map
   map<char,int> map1={
           {'w',0},{'y',2}
   };
   map<char,int>::iterator it;
    for(it=map1.begin();it!=map1.end();++it){
        printf("key=%c,value=%d\n",it->first,it->second);
    }
    //查找 要区别map和multimap
    printf("value=%d\n",map1['w']);//如果不存在 新增一个键值对 值为0
    if(map1.find('a')==map1.end()){
        printf("not");
    } else{
        printf("yes");
    }
    //multimap 不支持[]运算符 lower_bound(key)返回key对应的第一个值位置
    //upper_bound(key) 返回key对应的最后一个值的后一个位置
    

}

你可能感兴趣的:(数据结构,算法,c++,考研)