首页 > 其他分享 >STL库常用数据结构用法

STL库常用数据结构用法

时间:2022-08-15 17:48:29浏览次数:49  
标签:insert include STL testVector teams strMap 用法 push 数据结构

介绍了map、vector、queue、set的使用。以及string与char【】的互相转换

#include <iostream>
#include <map>
#include <set>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <queue>
using namespace std;

void vectorTest() {
    struct {
        vector<int> m;
        int start, end, day;
    } teams[999];

    // add
    teams[0].m.insert(teams[0].m.begin() + 2, 2);
    teams[0].m.push_back(1);

    // del
    teams[0].m.clear();
    teams[0].m.erase(teams[0].m.begin() + 1, teams[0].m.end());

    teams[0].m.size();

    // query,update
    teams[0].m[0] = 0;
    int qwq = teams[0].m[0];

    //遍历
    for (auto it = teams[0].m.begin(); it != teams[0].m.end(); it++) {
        printf("%d\n", *it);
    }
    for (vector<int>::iterator it = teams[0].m.begin(); it != teams[0].m.end();
         it++) {
        printf("%d\n", *it);
    }
}

/*
    Map底层是红黑树,根据key排序
    unorderMap底层是哈希表,建议使用unorderMap。
*/
void mapTest() {
    unordered_map<string, int> strMap;

    // add
    char a[10] = "qwq";
    strMap.insert(make_pair("123", 2));
    strMap.insert(make_pair(a, 4));

    // update
    strMap[a] = 3;
    int test = strMap[a];

    // query
    for (auto it = strMap.begin(); it != strMap.end(); it++) {
        cout << it->first << " " << it->second << endl;
    }

    // del
    strMap.erase(strMap.find("123")); //根据key查找
    // strMap.clear();
}

/*
    底层实现是红黑树,mutiset元素可重复
*/
vector<int> testVector;
void setTest()
{
    testVector.push_back(1);//0
    testVector.push_back(5);//1
    testVector.push_back(2);//2
    testVector.push_back(3);//3
    testVector.push_back(4);//4
    //1,4,3,2,0
    struct cmp{
      bool operator()(const int &a,const int &b)
      {
          return testVector[a]>testVector[b];
      }  
    };
    set<int,cmp> s;

    //add
    s.insert(1);
    s.insert(0);
    s.insert(2);
    s.insert(3);
    s.insert(4);

    //query
    for(auto it=s.begin();it!=s.end();it++)
    {
        cout<<*it<<endl;
    }
    cout<<*s.find(123)<<endl;

    //del
    s.erase(s.find(0));

    //no update
}

/*
    优先队列,底层实现为堆,也可以用set实现。性能上在不同场景有较小差异。
*/
void queueTest()
{
    struct queueContent
    {   
        int num;
        queueContent(int num)
        {
            this->num = num;
        }
        bool operator<(const queueContent &a)const
        {
            return num<a.num; //堆顶为最大值
        }
    };
    priority_queue<queueContent> q;
    q.push(queueContent(1));
    q.push(queueContent(2));
    q.push(queueContent(3));

    while(!q.empty())
    {
        queueContent tmp = q.top();
        q.pop();
        cout<<tmp.num<<endl;
    }
    
}


void stringAndchar() {
    // String to char[]
    string pp = "dagah";
    char p[8];
    int i;
    for (i = 0; i < pp.length(); i++)
        p[i] = pp[i];
    p[i] = '\0';
    printf("%s\n", p);
    cout << p;

    //char[] to string
    char test[10]="qweqweasd";
    string test2 = test;
}


int main() { queueTest(); }

 

标签:insert,include,STL,testVector,teams,strMap,用法,push,数据结构
From: https://www.cnblogs.com/MiraculousB/p/16589091.html

相关文章

  • CentOS系统中yum的基本用法
    最小化安装系统时,yum可能会因为网卡配置问题,随机启动配置,导致无法使用,在shell里面输入:yum--help ,结果显示yum已经正常安装了!!到底是哪里出了问题呢?经过网友的提示,我知......
  • python itertools库 itertools.product() 用法 产生多个序列的笛卡尔积
    python itertools.product()用来产生多个序列的笛卡尔积,参数可两个或者多个序列,元组tulple,列表list,range生成的序列,集合set都可作为参数1importitertools2#par......
  • python菜鸟学习: 5.字符串的基本用法
    #-*-coding:utf-8-*-str1="mynameisliyuzhoupan"#首字母大写print(str1.capitalize())#统计字符串中的字符出现的次数print(str1.count("n"))#自动补齐多......
  • Request.QueryString 的用法
    https://blog.csdn.net/dragon_ton/article/details/49464413?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogComme......
  • Math用法
    Math.min()和Math.max()用于确定一组数中的最值。对于数组操作:Math.max(...arr)。Math.ceil():向上舍入为最接近的整数。Math.floor():向下取整。Math.round():四舍......
  • c++xx 秋招学习STL库(三)
    主要参考:本篇学习无序关联式容器无序关联式容器种类无序容器功能unordered_map存储键值对<key,value>类型的元素,其中各个键值对键的值不允许重复,且该......
  • c++xx 秋招学习STL库(二)
    Map、Set、Unordered_map类与数据结构中所描述的一致,数组作为顺序型ADT,在STL库中vector也被称为序列式容器同时还存在着一些无序型容器我们本节主要就学习这类无序......
  • c++xx 秋招学习STL库 (一)【vector】
    c++xx秋招学习STL库(一)vector类主要针对一些编程时使用发现的一些问题与思考进行记录Vector的初始化一维数组//usingnamespacestd;vector<int>int_vec;vector<......
  • c#中try、catch、finally用法总结
    1、try和catch两者是不可分开的,如果try里面抛出了异常,catch就会捕捉到这个异常,执行catch内的代码。其中Exception是指的错误类型。2、finally代码块用于代码后面,不管你前......
  • find命令的7种用法
    find命令的7种用法,看完就没有不会用的Cloud研习社 Cloud研习社 2022-08-1007:31 发表于山东收录于合集#实战经验31个#Linux122个#云计算29个#计算机32个......