QVector 和 QMap

QVector_QMap

QVector简介

头文件#include<QVector>

模块: QT += core

功能: QVector类是动态数组的模板类,顺序容器,它将自己的每一个对象存储在连续的内存中,可以使用索引号来快速访问它们

常用接口

判断容器是否为空

bool QVector::isEmpty() const:如果容器为空返回true

QVector<int> v;        

qDebug() << v.isEmpty();

查询元素个数

count() size() length()

QVector<int> v;       

v << 1 << 2 << 3;     

qDebug() << v.size(); 

qDebug() << v.length();

qDebug() << v.count();

获取vector客观容量

int capacity() const    //返回可以存储在vector中而不强制重新分配的最大项数

QVector<int> v;         

v.insert(0, 1);         

v.insert(1, 2, 2);      

v.replace(2, 3);        

v << 1 << 1 << 1;       

qDebug() << v.capacity();

访问数据

下标方式访问

QVector<int> v;    

v << 1 << 2 << 3;  

qDebug() << v.at(0);

qDebug() << v[0];  

迭代器方式访问

QVector<int> v;                      

v << 1 << 2 << 3;                    

                                     

QVector<int>::iterator it = v.begin();

for(;it!= v.end(); it++)             

{                                    

    qDebug() << *it;                 

}                                    

添加数据

尾部添加数据

void append(const T &value) 

void append(const QVector<T> &value)

void push_back(const T &value)

QVector<int> v;         

v.append(1);            

                        

QVector<int> v1 = {2, 3};

v.append(v1);           

v.push_back(4);         

qDebug() << v;          

头部添加数据

void prepend(const T &value) 

void push_front(const T &value)

QVector<int> v;

v.prepend(1);  

v.push_front(2);

qDebug() << v; 

任意位置添加数据

void insert(int i, const T &value) //将元素插入到i位置,i从0开始计算

void insert(int i, int count, const T &value) //从i位置开始插入count个T &value类型元素

QVector<int> v;  

v.insert(0, 1);  

v.insert(1, 2, 2);

qDebug() << v;   

修改数据

void replace(int i, const T &value)   //改变i位置元素的值

QVector<int> v;  

v.insert(0, 1);  

v.insert(1, 2, 2);

v.replace(2, 3); 

qDebug() << v;   

查找元素位置

int indexOf(const T &value, int from=...) const  //返回 value在vector中第一次出现的位置

参数form含义:如果指定则从索引from开始向前搜索

QVector<int> v;         

v.insert(0, 1);         

v.insert(1, 2, 2);      

v.replace(2, 3);        

qDebug() << v.indexOf(1);

int QVector::lastIndexOf(const T &value, int from = ...) const   //返回 value在vector中最后一次出现的位置

QVector<int> v;             

v.insert(0, 1);             

v.insert(1, 2, 2);          

v.replace(2, 3);            

v << 1 << 1 << 1;           

qDebug() << v.lastIndexOf(1);

判断容器是否包含某元素

bool QVector::contains(const T &value) const        //如果vector包含value则返回true

QVector<int> v;          

v.insert(0, 1);          

v.insert(1, 2, 2);       

v.replace(2, 3);         

v << 1 << 1 << 1;        

qDebug() << v.contains(1);

bool QVector::endsWith(const T &value) const         //如果vector最后一个元素等于value则返回true

QVector<int> v;          

v.insert(0, 1);          

v.insert(1, 2, 2);       

v.replace(2, 3);         

v << 1 << 1 << 1;        

qDebug() << v.endsWith(1);

bool QVector::startsWith(const T &value) const       //如果vector第一个元素等于value则返回true

QVector<int> v;            

v.insert(0, 1);            

v.insert(1, 2, 2);         

v.replace(2, 3);           

v << 1 << 1 << 1;          

qDebug() << v.startsWith(1);

截取链表

QVector<T> QVector::mid(int pos, int length = ...) const     //返回一个子容器,其中包含该容器中的元素,从位置pos开始。如果length为-1,则包含pos之后的所有元素;否则包含长度元素(如果链表长度小于长度元素,则包含所有剩余元素)

QVector<int> v;        

v.insert(0, 1);        

v.insert(1, 2, 2);     

v.replace(2, 3);       

v << 1 << 1 << 1;      

qDebug() << v.mid(0);  

qDebug() << v.mid(1, 2);

删除数据

void remove(int i, int count)  //从vector中移除从 i开始的count个元素 

void pop_back()  //删除vector中最后一个元素

void pop_front()  //删除vector中第一个元素

QVector<int> v;  

v.insert(0, 1);  

v.insert(1, 2, 2);

v.replace(2, 3); 

v << 1 << 1 << 1;

v.remove(0);     

qDebug() << v;   

v.remove(1, 3);  

qDebug() << v;    

QVector应用

QMap简介

头文件#include<QMap>

模块: QT += core

功能:QMap存储(键、值)对,并提供与键相关联的值的快速查找,基于红黑树实现(std::map也是基于红黑树实现)

QMap和 QHash差异:

(1)QHash的查找速度比QMap要快

(2)当在QHash上迭代时,项的顺序是任意的。使用QMap,项目总是按键排序

(3)QHash的键类型必须提供operator==() 和全局qHash(Key) 函数。QMap的键类型必须提供operator<(),以指定全序顺序。从Qt 5.8.1开始,使用指针类型作为键也是安全的,即使底层operator<()不提供全序顺序。

常用接口

判断容器是否为空

bool QMap::isEmpty() const:判断容器是否为空

QMap<int, QString> m;  

qDebug() << m.isEmpty();

查询元素个数

count() 、size()         //没有length函数

QMap<int, QString> m;

m[0]  = "one";       

m[1] = "two";        

qDebug() << m.size();

qDebug() << m.count();

访问数据

通过key访问value

QMap<int, QString> m; 

m[0]  = "one";        

m[1] = "two";         

qDebug() << m[0];     

qDebug() << m.value(1);

插入数据

可以用运算符[ ]插入一对 (key,value) 到QMap对象中

QMap<int, QString> m;

m[0]  = "one";       

m[1] = "two";        

qDebug() << m;       

QMap::iterator QMap::insert(const Key &key, const T &value)插入一个带有键key和值value的新项

如果已经存在键为key的项,则该项的值将替换为value

如果有多个键为key的项,则最近插入的项的值将替换为value

QMap<int, QString> m;

m[0]  = "one";      

m[1] = "two";       

m.insert(2, "three");

qDebug() << m;      

QMap::iterator QMap::insertMulti(const Key &key, const T &value)插入一个带有键key和值value的新项。

如果映射中已经存在具有相同键的项,则该函数将简单地创建一个新项。(此行为不同于insert(),后者覆盖现有项的值)

QMap<int, QString> m;   

m[0]  = "one";          

m[1] = "two";           

m.insert(2, "three");   

qDebug() << m;          

                        

m.insertMulti(2, "four");

qDebug() << m;          

修改数据

可以直接通过key访问对应value进行修改

QMap<int, QString> m;

m[0]  = "one";      

m[1] = "two";       

m[0] = "three";     

qDebug() << m;      

获取对应key的迭代器

QMap::iterator QMap::find(const Key &key)返回一个迭代器,该迭代器指向map中键为key的项

如果map包含多个传入键的项,则此函数返回一个迭代器,该迭代器指向最近插入的项。其他值可以通过对迭代器自增来访问

QMap<int, QString> m;                      

m[0]  = "one";                             

m[1] = "two";                              

QMap<int, QString>::iterator it = m.find(1);

qDebug() << *it;                                                          

查看QMap中是否包含某一元素

bool QMap::contains(const Key &key) const如果map包含键为key的项,则返回true;否则返回false。

QMap<int, QString> m;    

m[0]  = "one";           

m[1] = "two";            

qDebug() << m.contains(0);

删除数据

int QMap::remove(const Key &key)从map中删除所有带有key的项目。返回删除的项数,通常为1,但如果键不在map中则为0,或者如果已对键使用insertMulti()则为 >1

QMap<int, QString> m;    

m[0]  = "one";           

m[1] = "two";            

m.insertMulti(0, "three");

qDebug() << m.remove(0); 

qDebug() << m;           

QMap应用

employee.h

#ifndef EMPLOYEE_H                                                

#define EMPLOYEE_H                                                

                                                                  

#include <QDebug>                                                 

                                                                  

class Human                                                       

{                                                                 

public:                                                           

    Human(){}                                                     

    Human(const int age): age(age)                                

    {                                                             

    }                                                             

                                                                                                                                     

private:                                                          

    int age;                                                      

                                                                  

    friend inline QDebug operator<<(QDebug debug, const Human& h);

    friend inline bool operator<(const Human& h1, const Human& h2);

};                                                                

                                                                  

                                                                  

inline QDebug operator<<(QDebug debug, const Human& h)            

{                                                                 

    return (debug << h.age);                                        

}                                                                 

                                                                  

inline bool operator<(const Human& h1, const Human& h2)           

{                                                                 

    return h1.age < h2.age;                                       

}                                                                 

                                                                  

#endif // EMPLOYEE_H                                              

Human h1(22);         

Human h2(18);         

                      

QMap<Human, QString> m;

m[h1] = "小王";         

m[h2] = "小张";         

                      

qDebug() << m;        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL系列】视图特性

「前言」文章内容大致是MySQL事务管理。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 视图1.1 视图概念1.2 创建视图1.3 修改互相影响1.4 删除视图1.5 视图规则和限制 视图 1.1 视图概念 视图是一个虚拟表&#xff0c;其内容由查询定义同真实的表一样…

uniapp 实现多音频同时播放 解决sessionCategory = “ambient“不生效问题

1.1完整代码 <template><view></view> </template><script>export default {data() {return {BGInnerAudioContext1: null, //背景1BGInnerAudioContext2: null, //背景2}},onLoad() {this.play1()this.play2()},methods: {//音频1play1() {//背…

保护个人隐私,自建个性图床:Cpolar+Qchan轻量级搭建教程分享

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景&#xff0c;在大量开发人员的努力下&#xff0c;已经开发出大…

h5开发网站-使用jquery来实现二层嵌套的左侧列表,点击后显示右侧内容的效果

一、需求&#xff1a; 使用jquery来实现二层嵌套的左侧列表&#xff0c;点击后显示右侧内容的效果。 二、思路&#xff1a; 为一级列表项和二级子列表项分别添加了点击事件处理程序。当一级列表项被点击时&#xff0c;使用.slideToggle()方法展开或收起对应的二级子列表项。…

如何激励员工?

如何激励员工&#xff1f;激励就是发现员工的需求&#xff0c;并满足它。 今天想给大家介绍下“马斯洛需求理论”&#xff0c;毕竟想要更好的激励下属创造价值&#xff0c;你首先需要了解他想要什么。对吧。 马斯洛需求理论是美国心理学家马斯洛在上世纪四十年代年提出的。他…

C语言深入理解指针(非常详细)(五)

目录 回调函数qsort使用举例qsort函数的模拟实现sizeof和strlen的对比sizeofstrlensizeof和strlen的对比一道关于sizeof的题 回调函数 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指…

Python项目开发:Flask基于Python的天气数据可视化平台

目录 步骤一&#xff1a;数据获取 步骤二&#xff1a;设置Flask应用程序 步骤三&#xff1a;处理用户输入和数据可视化 步骤四&#xff1a;渲染HTML模板 总结 在这个数字化时代&#xff0c;数据可视化已经成为我们理解和解释信息的重要手段。在这个项目中&#xff0c;我们…

OpenCV(三十):图像膨胀

1.图像膨胀原理 图像膨胀的原理是将一个结构元素&#xff08;也称为核或模板&#xff09;在图像上滑动&#xff0c;并将其与图像中对应位置的像素进行比较。如果结构元素的所有像素与图像中对应位置的像素都匹配&#xff0c;那么该位置的像素值保持不变。如果结构元素的任何一个…

C#__多线程之任务和连续任务

/// <summary> /// /// 任务&#xff1a;System.Threading.Tasks&#xff08;异步编程的一种实现方式&#xff09; /// 表应完成某个单元工作。这个工作可以在单独的线程中运行&#xff0c;也可以以同步方式启动一个任务。 /// /// 连续任务&#…

Mysql数据库基础总结:

什么是数据库&#xff1a; 数据库&#xff08;DataBase&#xff09;&#xff1a;存储和管理数据的一个仓库。 数据库类型分为&#xff1a;关系型数据库和非关系型数据库。 关系型数据库&#xff08;SQL&#xff09;&#xff1a;存储的数据以行和列为格式&#xff0c;类似于e…

wpf C# 用USB虚拟串口最高速下载大文件 每包400万字节 平均0.7s/M,支持批量多设备同时下载。自动识别串口。源码示例可自由定制。

C# 用USB虚拟串口下载大文件 每包400万字节 平均0.7s/M。支持批量多设备同时下载。自动识别串口。可自由定制。 int 32位有符号整数 -2147483648~2147483647 但500万字节时 write时报端口IO异常。可能是驱动限制的。 之前用这个助手发文件&#xff0c;连续发送&#xff0…

【创新项目探索】大数据服务omnidata-hive-connector介绍

omnidata-hive-connector介绍 omnidata-hive-connector是一种将大数据组件Hive的算子下推到存储节点上的服务&#xff0c;从而实现近数据计算&#xff0c;减少网络带宽&#xff0c;提升Hive的查询性能。目前支持Hive on Tez。omnidata-hive-connector已在openEuler社区开源。 …

运行java命令出现 Error: Invalid or corrupt jarfile XXX.jar

朋友 我当你一秒朋友 朋友 我当你一世朋友 奇怪 过去再不堪回首 怀缅 时时其实还有 运行java命令出现 Error: Invalid or corrupt jarfile XXX.jar 基本可以断定&#xff0c;是jar不完整导致的。不完整&#xff01;&#xff01;&#xff01;记住关键字 检查1&#xff1a; …

【Mysql】数据库第三讲(表的约束、基本查询语句)

表的约束和基本查询 1.表的约束1.1 空属性1.2默认值1.3列描述1.4 zerofill1.5主键1.6 自增长1.7 唯一键1.8外键 1.表的约束 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c; 需要有一些额外的约束&#xff0c; 更好的保证数据的合法性&#xff0c;从…

colcon build --symlink-install ,编译失败解决方法

colcon build --symlink-install编译ros2源代码时&#xff0c;或者其example时报此错误。 EasyInstallDeprecationWarning: easy_install command is deprecated.报错的路径是/usr/lib/python3/dist-packages中的setuptools&#xff0c;版本是setuptools-59.6.0.egg-info&…

鸿蒙应用开发之容器组件

一、概述 一个丰富的页面通常是由很多基础组件组成的&#xff0c;那么我们如何才能让这些组件有条不紊地在页面上布局呢&#xff1f;这就需要借助容器组件来实现。 容器组件是一种比较特殊的组件&#xff0c;它可以包含其他的组件&#xff0c;而且按照一定的规律布局&#xf…

基于SSM的精品酒销售管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Java项目-苍穹外卖-Day10-SpirngTask及WebSocket

文章目录 前言SpringTask介绍SpringTask_corn表达式Spring_Task入门案例 订单状态定时处理需求分析代码开发功能测试 WebScoket介绍入门案例 来单提醒需求分析代码开发功能测试 客户催单代码开发功能测试 前言 本章实现的业务功能 超时未支付订单自动取消&#xff0c;配送中订…

想了解Java内存分析工具MAT?看这里哦

MAT 简介 MAT全称为 Eclipse Memory Analyzer Tool &#xff0c;eclipse基金会开源的java堆内存分析工具&#xff0c;可以快速的进行堆内存分析、大对象可视化、类加载器分析、线程分析等。在我们碰到线上内存问题时候&#xff0c;是不可多得的好工具&#xff08;当然也有artha…