首页 > 其他分享 >STL vector容器存储键值对

STL vector容器存储键值对

时间:2023-06-18 17:55:06浏览次数:38  
标签:std map 存储 STL second vector 键值

在阅读tvm源码时,发现了一个挺有意思的代码:

std::vector<std::pair<std::string, ObjectRef>> update;

vector容器里竟然存储的是键值对,amazing啊!!!还是第一次遇到这种写法的,这与直接写成map有啥不一样呢?


首先,这两种方式都可以用于存储键值对,只是它们具有不同的特性和实用场景。

  • std::vector<std::pair<std::string, ObjectRef>> 使用向量容器来存储键值对,元素在内存中是连续存储的,可以通过索引进行快速访问,容器内元素不会自动排序,允许元素重复。
    实用场景:需要频繁遍历或者按照索引访问元素的场景。对于查找特定键值的操作,需要线性搜索,时间复杂度为O(n)
    另:
    针对vector容器存储的是键值对的这种情况,如果需要对元素进行排序(如果业务需要,map满足不了),可重写sort中的排序规则,举例如下:
sort(s.begin(), s.end(), [&](const auto& x, const auto& y) {
            return x.first * y.second < x.second * y.first;
            //  x.first/x.second < y.second/y.second (升序排序)
        });
  • std::map<std::string, ObjectRef>是一个关联容器,使用红黑树来存储键值对,它会根据键值进行排序,可以快速查找特定键的值,时间复杂度为O(log(n)),但对于按照索引访问元素或遍历所有元素的情况,性能会比vector差。

因此,选择使用 std::vector<std::pair<std::string, ObjectRef>> 还是 std::map<std::string, ObjectRef> 取决于具体的需求和使用场景。
如果需要频繁遍历或按索引访问元素,可以选择 std::vector。如果需要快速查找特定键的值,可以选择 std::map。

标签:std,map,存储,STL,second,vector,键值
From: https://www.cnblogs.com/whiteBear/p/17489414.html

相关文章

  • C++ STL(algorithm)
    1字符和整数排序#include<iostream>#include<algorithm>usingnamespacestd;voidstl1(){inta[]={-1,9,-34,100,45,2,98,32};intlen=sizeof(a)/sizeof(int);sort(a,a+len);//由小到大排列sort(a,a+len,greater<int>());//由大到小排列}vo......
  • C++ STL(algorithm)
    1字符和整数排序#include<iostream>#include<algorithm>usingnamespacestd;voidstl1(){inta[]={-1,9,-34,100,45,2,98,32};intlen=sizeof(a)/sizeof(int);sort(a,a+len);//由小到大排列sort(a,a+len,greater<int>());//由大到小排列}vo......
  • .Net7发现System.Numerics.Vector矢量化的一个bug,Issues给了dotnet团队
    因为前几天做.Net7的矢量化性能优化,发现了一个bug。在类System.Numerics.Vector里面的成员变量IsHardwareAccelerated。但是实际上不确定这个bug是visualstudio2022的还是System.Numerics.Vector库的,个人认为应该是前者,也就是vs的bug。Vector.IsHardwareAccelerated返回的是Tr......
  • Redis--键值设计
    Redis的key最好遵循如下规则设计:1.遵循基本格式:业务名称:数据名:ID2.长度不超过44个字节3.不包含特殊字符优点:1.可读性强2.避免key冲突3.方便管理4.更节省内存:key是string类型,底层编码是int,embstr,raw三种,embstr在小于44个字节长度使用,采用连续......
  • stack、vector的使用和特点
    Stack的方法stack是继承VectorclassStackextendsVector特点:栈模式----遍历时元素是先进后出具体代码实现:publicstaticvoidmain(String[]args){ Stack<String>stack=newStack<>(); //将元素添加到栈顶 stack.push("aaa"); stack.push("bbb"); stack......
  • STL
    STL概述什么是C++标准模板库(STL)标准模板库STL(StandardTemplateLibrary),是C++标准库的一部分,不需要单独安装,只需要#include头文件。C++对模板(Template)支持得很好,STL就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。C++语言的核心优势之一就......
  • leetcode735行星碰撞vector模拟栈操作
    vector的基本操作:vector<int>v;v.back();//获取尾部数据v.front();//获取首部数据v.push_back(3);//在尾部加入数据3v.pop_back();//弹出尾部数据首先只有前一个行星向右走,后一个行星向左走才可能相撞。也就是一正一负的组合使用一个变量aliva记录当前行星是否会被销毁,......
  • C/C++——vector的基本操作总结
    标准库vector类型是C++中使用较多的一种类模板,vector类型相当于一种动态的容器,在vector中主要有一些基本的操作,接下来分别从以下的几个方面总结:vector对象的定义和初始化vector对象的基本操作,主要包括添加元素,遍历等1、vector对象的定义和初始化在vector中主要有四种定义和初始化的......
  • List 和 Map 区别;Arraylist 与 LinkedList 区别;ArrayList 与 Vector 区别;
    一、概述List是存储单列数据的集合,Map是存储键和值这样的双列数据的集合,List中存储的数据是有顺序,并且允许重复,值允许有多个null;Map中存储的数据是没有顺序的,键不能重复,值是可以有重复的,key最多有一个null。二、明细 List1)可以允许重复的对象。2)可以插入多个null元素。3)是一......
  • WSL 2中安装VectorCAST
    “转载自维克多汽车技术(上海)有限公司,作者VectorChina”如需在Windows平台上搭建Linux开发和测试环境,常用的方法是使用VMware公司的虚拟化产品如VMwareWorkstation,或VMwarevSphere创建Linux虚拟机。为了精简传统虚拟机或双启动设置的开销,微软在Windows10平台中引入WSL1兼容层......