非线性数据结构

本文介绍了C++中的四种非线性数据结构:set(有序不重复、有序可重复)、unordered_set(无序不重复)、unordered_multiset(无序可重复)以及map和multimap(有序和无序版本),包括它们的构造、遍历、元素操作和特性的对比。
摘要由CSDN通过智能技术生成

非线性数据结构

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

//头文件
#include <set>
#include <unordered_set>
//构造
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 <stdio.h>
#include <map>
#include <unordered_map>

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

    pair<char,int> 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对应的最后一个值的后一个位置
    

}
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值