QVector 和 QMap

这篇具有很好参考价值的文章主要介绍了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应用

QVector 和 QMap,qt,qt

QVector 和 QMap,qt,qt

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;         文章来源地址https://www.toymoban.com/news/detail-706882.html

到了这里,关于QVector 和 QMap的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【QT 基础教程 九】QVector类详解

    概要:本期主要讲解Qt中QVector容器类的常用接口。 头文件:#includeQVector 模块: QT += core 功能:主要用于数据存储,可以类比C++中的泛型容器vector(动态数组)进行学习。 1.初始化、赋值 2.插入元素 3.删除元素 4.大小、长度 5.清空 6.替换元素 7.定位元素 1.QVector 与 QList 之间的

    2024年02月14日
    浏览(25)
  • Qt QVector 详解:从底层原理到高级用法

    在计算机编程的世界中,数据结构是一个核心概念,它为我们提供了有效地组织和存储数据的方法。在众多数据结构中,向量(Vector)作为一种动态数组,因其灵活性和高效性受到了广泛的关注。特别是在使用 Qt 框架进行 C++ 编程时,QVector 成为了程序员们的得力工具。 QVe

    2024年02月09日
    浏览(34)
  • 深入剖析 Qt QMap:原理、应用与技巧

    QMap是Qt框架中的一个关联容器类,用于存储键值对。它提供了高效且易于使用的方法来处理键值对数据,使得开发者可以在各种实际场景中轻松地存储和检索数据。QMap内部使用平衡二叉树(红黑树)作为底层数据结构,提供了高效的插入、删除和查找操作。掌握QMap及其基本

    2023年04月21日
    浏览(38)
  • QT List&Qvector at赋值出错以及解决办法 QT基础入门【QT存储结构】

    在Qt中QList,Qvector一般获取元素都是通过at(index)来获取,但是at()的返回是一个const 常引用,也就是元素不支持改变 也就是说*.at(i)并不能用来给Qlist与Qvector来赋值,要采用其他方式赋值

    2024年02月10日
    浏览(26)
  • QT STL容器QMap【增、删(两种方式)、改、查、遍历(三种方式)、清除】

    QMap/QMultiMap属于关联式容器,其底层结构是通过二叉树实现,故其查找value的效率很快。QMap中的数据都是成对出现的,第一个称为key(键),第二个称value(键值)。 QMap是Qt的一个模板类,它是基于红黑树算法的一套字典。 QMapKey,T是Qt容器类型的一种,它通过(Key, value)存储一

    2024年02月13日
    浏览(29)
  • 浅谈QMap中erase与remove的区别

    在实践中发现erase删除元素之后,其迭代器自动指向下一个元素,而remove删除元素之后迭代器不会自动指向下一个元素。 使用erase删除元素 删除示例可以看之前的记录。 使用remove删除元素 代码讲解 上述代码其功能是在mapMsg2中找与MsgMap1中相同的元素值(value()),从mapMsg2将相

    2024年02月07日
    浏览(23)
  • 【Qt】Qt 开发环境安装 ( Qt 版本 5.14.2 | Qt 下载 | Qt 安装 )

    Qt 开发环境下载地址 : https://download.qt.io/archive/qt/ 该界面可以下载 Qt 各个版本的开发环境 ; Qt 版本选择 , Qt 的各个大版本都在同步更新 , 如 5.1 , 5.9 , 5.14 , 6.0 等 , 每个版本都有不同的性能和功能 , 每个版本进入后的二级目录的小版本 , 尽量选择最新的版本 ; 如进入 5.14 目录后

    2024年02月14日
    浏览(40)
  • 【 Qt 的“前世”与“今生”】Qt 的起源 | Qt 的发展历程 | 为什么选择 Qt | Qt 的授权模式 | Qt 版本选择 | Qt Widgets和QML | Qt 程序发布

    目录 1、什么是 Qt ? 2、Qt 可以用来做什么? 3、Qt 的由来与发展 3.1、Qt 的起源与发展 3.2、Qt 发展经历的三家公司 4、为什么选择 Qt ? 5、Qt 支持的平台 6、Qt 的授权模式 7、Qt 版本的选择 8、选择 QML 还是 Qt Widgets? 8.1、什么是 Widgets ? 8.2、什么是 QML ? 8.3、Widgets 与 QML 工程

    2024年02月05日
    浏览(40)
  • Qt不会操作?Qt原理不知道? | Qt详细讲解

    UI界面与控件类型介绍 Qt设计器原理 Qt设计器(UI界面)是用于设计和构建带有Qt Widgets 的图形用户界面(QT GUI)。注意:必须在建立项目时勾选上.ui文件这一项 控件类型的介绍 信号与槽机制处理 信号与槽是用与对象之间的通信,是Qt的核心 注意:信号与槽不是C++标准代码,

    2023年04月08日
    浏览(25)
  • 【Qt 学习笔记】Qt 开发环境的搭建 | Qt 安装教程

    博客主页:Duck Bro 博客主页 系列专栏:Qt 专栏 关注博主,后期持续更新系列文章 如果有错误感谢请大家批评指出,及时修改 感谢大家点赞👍收藏⭐评论✍ 文章编号:Qt 学习笔记 / 02 1. 安装包下载(网盘链接) 链接:https://pan.baidu.com/s/1t3jbYcFYFuJIfe0hPmeDmQ?pwd=duck 提取码:du

    2024年04月26日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包