qt 容器QVector,QMap,QHash的常見使用與該迭代器的簡單介紹

一.

QVector容器是一個動態數組,可以容納任意數量的元素,在相鄰的內存中存儲給定的數據類型作為一組數據,在QVector前部或中間位置插入元素都會導致內存中大量的數據元素移動,這使得操作速度會減慢.可使用迭代器對這組數據進行訪問.

和其他的容器類型類似,QVector容器的功能也有添加元素append(),刪除元素remove(),修改元素replace(),查詢contains(),訪問.......

    vStarts<<"鹿晗"<<"熱巴";        //添加(尾部插入)vStarts.append("楊紫");        //頭部插入vStarts.prepend("Anglebaby");  //尾部插入vStarts.insert(2,"小明");      //指定位置插入vStarts.replace(2,"迪麗熱巴");//替換//刪除元素下標為0的元素vStarts.remove(0);//刪除某個元素vStarts.removeAll("鹿晗");    //移除所有比較結果相同的元素vStarts.removeAt(0);          //移除指定位置的元素vStarts.removeOne("楊紫");    //移除比較結果相同的第一個元素vStarts.clear();刪除所有元素qDebug()<<"是否有小明?:"<<vStarts.contains("小明");//查詢是否有該元素

使用迭代器訪問數據.

1.

java風格迭代器

    //java風格只讀迭代QVectorIterator<QString> it_sr(vStarts);for(it_sr.toFront();it_sr.hasNext();){qDebug() << it_sr.next();}//java風格讀寫迭代QMutableVectorIterator<QString> it_srw(vStarts);for(it_srw.toFront();it_srw.hasNext();){QString s = it_srw.next();//方式1.使用QString類型的compare()方法比較字符串.比較結果相同則返回0(假).if(!QString::compare(s,"熱巴")){    it_srw.setValue("趙麗穎");}//方式2.//if(s == "熱巴"){//    it_srw.setValue("趙麗穎");//}}

2.

STL風格迭代器.

    //STL讀寫迭代器QVector<QString>::iterator it_VWR;it_VWR = vStarts.begin();for(;it_VWR != vStarts.end();++it_VWR){*it_VWR = *it_VWR + "好人";qDebug()<<*it_VWR;}//STL只讀迭代器QVector<QString>::const_iterator it_VR;it_VR = vStarts.constBegin();for(;it_VR != vStarts.constEnd();++it_VR){qDebug()<<*it_VR;}

二.

容器QMap類型由鍵(key)值(value)對組成一個元素.通過鍵key映射到值value.

第一個QString數據類型值是鍵key,第二個QString數據類型值是值value.一個鍵對應一個值,以key字母順序(A~Z)存儲數據.

    //一個鍵對應一個值QMap<QString,QString> infoMap;//添加元素infoMap.insert("王祖藍","163cm");   //方式1infoMap["姚明"] = "226cm";          //方式2infoMap.insertMulti("易烊千璽","173cm");   //方式3.如果映射中已經存在具有相同鍵的項,則該函數將簡單地創建一個新項

通過key找value

    qDebug() <<"姚明:" <<infoMap["姚明"];               //226cmqDebug() <<"易烊千璽:" <<infoMap.value("易烊千璽");  //173cm

通過value找key

qDebug()<<"173cm的是誰呢?"<<infoMap.key("173cm"); //易烊千璽

1.

java風格迭代器

與QVector容器迭代器非常類似,打印時要把迭代器位置指向下一個位置.同時打印鍵值對只能分別把鍵key和值value寫出來,不能把倆個鍵值對當做一個整體來打印輸出.

    //java風格只讀迭代器QMapIterator<QString,QString> it_r(infoMap);for(it_r.toFront();it_r.hasNext();){//方式1//it_r.next();//qDebug()<<it_r.key() <<":"<<it_r.value();//以key的字母A~Z作為排序的依據.有序存儲.//方式2qDebug()<<it_r.next().key() <<":"<<it_r.value();}    //java風格讀寫迭代器QMutableMapIterator<QString,QString> it_rw(infoMap);if(it_rw.findNext("163cm")){    //查找元素it_rw.setValue("163.1cm");  //重新設置元素值value}for(it_rw.toFront();it_rw.hasNext();){it_rw.next();//獲取元素qDebug()<<it_rw.key()<<":"<<it_rw.value();}

2.

STL風格迭代器

    //STL風格讀寫迭代器QMap<QString,QString>::iterator it_QWR;it_QWR = wMap1.begin();for(;it_QWR != wMap1.end();++it_QWR){qDebug()<<it_QWR.key()<<it_QWR.value() + "-STL";}//STL風格只讀迭代器QMap<QString,QString>::const_iterator it_QR;it_QR = wMap1.constBegin();for(;it_QR != wMap1.constEnd();++it_QR){qDebug()<<it_QR.key()<<it_QR.value() + "-stl";}

3.

前面講的是一個鍵對應一個值的情況,下面是一個鍵對應多個值的情況.

    //一個鍵對應對多個值QMultiMap<QString,QString> wMap1;wMap1.insert("spring","15°C");wMap1.insert("summer","35°C");//一個鍵key插入多個值valuewMap1.insert("summer","39°C");wMap1.insert("summer","40°C");wMap1.insert("autumn","23°C");wMap1.insert("winter","-5°C");wMap1.insert("winter","-15°C");wMap1.insert("winter","-55°C");wMap1.remove("winter","-55°C"); //刪除元素//打印一個鍵的多個值(鍵值對).所有winter鍵key的鍵值對都會被打印出來qDebug()<<endl<<"winter:"<<wMap1.values("winter");

通過value()函數,參數填寫鍵值key,就能打印所有相同鍵的值value.即一個鍵key的對應的多個值value.使用迭代器訪問的方式與上面一樣.

三.

QHash容器與QMap容器一樣,也是使用鍵值對的方式存儲數據,它實現了一個哈希表,通過哈希函數將鍵映射到值,數據存放無序,任意順序存儲,所以它的存儲速度比QMap更快.

    //QHash類,數據存放無序QHash<int,QString> moneyHash;moneyHash.insert(1,"一塊錢");moneyHash.insert(10,"十塊錢");moneyHash.insert(20,"二十塊錢");   //方式1moneyHash[50] = "五十塊錢";        //方式2moneyHash[100] = "一百塊錢";moneyHash.insertMulti(100,"毛爺爺"); //一個鍵有多個值使用函數insertMulti()插入//該方式讓前面key為100的value"一百塊錢"會被"毛爺爺"覆蓋,insertMulti():一個鍵多個值會被保存//moneyHash[100] = "毛爺爺";  

需要注意的是,如果一個鍵映射多個值,使用方式2并不能添加一個新的鍵值對,它只會在同一個鍵的鍵值對上,把前面相同鍵的值覆蓋掉.所以使用insertMulti()函數才會添加新的鍵值對,而不會覆蓋原有的鍵值對.

1.

java風格迭代器

迭代器的使用方式和上面的一樣,這里就不一一列舉了.

    //java風格只讀迭代器QHashIterator<int,QString> it_mr(moneyHash);//java風格讀寫迭代器QMutableHashIterator<int,QString> it_mrw(moneyHash);

2.

STL風格迭代器

由于迭代器的訪問方式和前面的QMap類似,就不一一詳細說明.

    //STL讀寫迭代器    QHash<int,QString>::iterator it_SWR;   //STL只讀迭代器QHash<int,QString>::const_iterator it_SR;

all~~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215596.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215596.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215596.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AE無法連接到ME怎么辦?

最近學習了一下adobe的系列軟件 ae是2018的 me是2023的 本來想用me來做渲染的 發現鏈接不上 試了一下重裝ae&#xff0c;升級版本到2023 鏈接還是不行 幸好看了這篇博客解決了我的問題&#xff01;&#xff01; AE無法連接到ME怎么辦? AE和ME沒有裝在一個盤無法識別的 用了第二…

【Netty為什么適合做網絡編程】

Netty為什么適合做網絡編程 描述優點 描述 Netty是由JBOSS提供的一個Java開源框架。Netty提供異步的、基于事件驅動的網絡應用程序框架&#xff0c;用以快速開發高性能、高可靠性的網絡IO程序。Netty主要用來做網絡通信&#xff0c;一般可以用來做RPC框架的通信工具、實現即時…

特發性震顫的嚴重程度如何評估?

特發性震顫的嚴重程度評估是一個相對主觀和復雜的過程&#xff0c;需要醫生綜合考慮患者的多種癥狀和體征進行判斷。通常&#xff0c;評估特發性震顫的嚴重程度會考慮以下幾個方面&#xff1a; 一、震顫的頻率和強度 評估特發性震顫的嚴重程度時&#xff0c;首先要觀察患者震…

RS485網關如何采集傳感器和儀器儀表數據-天拓四方

在自動化生產和監測系統中&#xff0c;傳感器和儀器儀表扮演著重要的角色&#xff0c;它們可以收集各種數據&#xff0c;如溫度、壓力、流量等&#xff0c;并對這些數據進行必要的分析和處理。然而&#xff0c;如何有效地采集這些數據是一個關鍵問題。RS485網關是一種常見的設備…

裸機開發與Linux驅動開發的區別

一. 簡介 裸機開發&#xff0c;即我們常說的不帶系統的單片機開發。 Linux驅動開發&#xff0c;即帶文件系統的Linux驅動的開發。 二. 裸機開發與Linux驅動開發的區別 1. 裸機開發 比較底層&#xff0c;跟寄存器打交道&#xff0c;有些 MCU提供了庫。 2. Linux驅動開發…

MQ-Det: Multi-modal Queried Object Detection in the Wild

首個支持視覺和文本查詢的開放集目標檢測方法 NeurIPS2023 文章&#xff1a;https://arxiv.org/abs/2305.18980 代碼&#xff1a;https://github.com/YifanXu74/MQ-Det 主框圖 摘要 這篇文章提出了MQ-Det&#xff0c;一種高效的架構和預訓練策略&#xff0c;它利用文本描述的…

Spring框架中的五種常用設計模式

1、單例模式 Spring 的 Bean 默認是單例模式&#xff0c;通過 Spring 容器管理 Bean 的?命周期&#xff0c;保證每個 Bean 只被 創建?次&#xff0c;并在整個應?程序中重用。 2.工廠模式 Spring 使???模式通過 BeanFactory 和 ApplicationContext 創建并管理 Bean 對象…

以csv為源 flink 創建paimon 臨時表相關 join 操作

目錄 概述配置關鍵配置測試啟動 kyuubi執行配置中的命令 bug解決bug01bug02 結束 概述 目標&#xff1a;生產中有需要外部源數據做paimon的數據源&#xff0c;生成臨時表&#xff0c;以使用與現有正式表做相關統計及 join 操作。 環境&#xff1a;各組件版本如下 kyuubi 1.8…

Python從門到精通(九):numpy科學計算庫

? Numpy 這是一個三方的庫&#xff0c;是很多科學與工程庫的基礎。在機器學習中應用廣泛。 import numpy as np。 數組運算 import numpy as npax np.array([1, 2, 3, 4]) ay np.array([5, 6, 7, 8])type(ax) print(f{ax} * 2 {ax * 2}) #[2 4 6 8] print(f{ax} 10 {a…

Spring(Spring/Springboot 的創建) 基礎

一. Spring 1.1 Spring是什么&#xff1f; Spring 指的是 Spring Frameword(Spring 框架),它是一個開源框架。 Spring 是包含了眾多工具方法的IoC容器。 1.2 什么是容器&#xff1f; 容器時用來容納某種物品的裝置。 我們之前接觸到的容器&#xff1a; ? List/Map ->…

內存cache大量使用問題導致應用異常問題

概述 28s應用崩潰查看內存使用有大量cache。 分析 查看free 信息平時的確存在大量cache使用的情況查看dmes信息發現filesendserver崩潰 崩潰信息為系統調用 查看到page allocation failure:order 5 同時也看到系統內存使用情況 查看到系統實際還有部分內存為空閑內存&am…

【Android開發-26】Android中服務Service詳細講解

1&#xff0c;service的生命周期 Android中的Service&#xff0c;其生命周期相較Activity來說更為簡潔。它也有著自己的生命周期函數&#xff0c;系統會在特定的時刻調用對應的Service生命周期函數。 具體來說&#xff0c;Service的生命周期包含以下幾個方法&#xff1a; on…

[筆記] 使用 qemu/grub 模擬系統啟動(單分區)

背景 最近在學習操作系統&#xff0c;需要從零開始搭建系統&#xff0c;由于教程中給的虛擬機搭建的方式感覺還是過于重量級&#xff0c;因此研究了一下通過 qemu 模擬器&#xff0c;配合 grub 完成啟動系統的搭建。 qemu 介紹 qemu 是一款十分優秀的系統模擬器&#xff0c;…

Linux上進行Nacos安裝

Nacos安裝指南 僅供參考&#xff0c;若有錯誤&#xff0c;歡迎批評指正&#xff01; 后期會繼續上傳docker安裝nacos的過程&#xff01; 1.Windows安裝 開發階段采用單機安裝即可。 1.1.下載安裝包 在Nacos的GitHub頁面&#xff0c;提供有下載鏈接&#xff0c;可以下載編譯好…

《C++新經典設計模式》之第7章 單例模式

《C新經典設計模式》之第7章 單例模式 單例模式.cpp 單例模式.cpp #include <iostream> #include <memory> #include <mutex> #include <vector> #include <atomic> using namespace std;// 懶漢式&#xff0c;未釋放 namespace ns1 {class Gam…

手動搭建koa+ts項目框架(日志篇)

文章目錄 前言一、安裝koa-logger二、引入koa-logger并使用總結如有啟發&#xff0c;可點贊收藏喲~ 前言 本文基于手動搭建koats項目框架&#xff08;路由篇&#xff09;新增日志記錄 一、安裝koa-logger npm i -S koa-onerror and npm i -D types/koa-logger二、引入koa-lo…

【每日一題】【12.11】1631.最小體力消耗路徑

&#x1f525;博客主頁&#xff1a; A_SHOWY&#x1f3a5;系列專欄&#xff1a;力扣刷題總結錄 數據結構 云計算 數字圖像處理 1631. 最小體力消耗路徑https://leetcode.cn/problems/path-with-minimum-effort/這道題目的核心思路是&#xff1a;使用了二分查找和BFS &a…

PHP基礎(2)

目錄 一、PHP 數據類型 二、PHP 字符操作函數 strlen() str_word_count() strrev() strpos() str_replace() 一、PHP 數據類型 PHP 有八種基本數據類型和兩種復合數據類型&#xff1a; 整型&#xff08;int&#xff09;&#xff1a;表示整數&#xff0c;可以是正數或負數&am…

線程Thread源代碼思想學習1

1.啟動線程代碼 public class MultiThreadExample {public static void main(String[] args) {// 創建兩個線程對象Thread thread1 new Thread(new Task());Thread thread2 new Thread(new Task());// 啟動線程thread1.start();thread2.start();} }class Task implements Ru…

EXPLAIN 執行計劃

有了慢查詢語句后&#xff0c;就要對語句進行分析。一條查詢語句在經過 MySQL 查詢優化器的各種基于成本和規則的優化會后生成一個所謂的執行計劃&#xff0c;這個執行計劃展示了接下來具體執行查詢的方式&#xff0c;比如多表連接的順序是什么&#xff0c;對于每個表采用什么訪…