关于QMap的几点总结思考

article/2025/10/23 21:33:47

关于QMap的几点总结思考

题记:
前段时间集中精力写了数据的分拣算法,用到了容器QMapQMultiMap。回头再来回去该算法的时候,又觉得当时好像不是自己写的一样,于是有必要将QMap类来总结一下。

首先来了解下C++中STL中的map:

map是STL的一个关联容器,它提供一对一的hash。
特点:

  • 第一个可以称为关键字(key),每个关键字只能在map中出现一次;
  • 第二个可能称为该关键字的值(value);

map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。

Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。

在map内部所有的数据都是有序的,后边我们会见识到有序的好处。比如一个班级中,每个学生的学号跟他的姓名就存在著一对一映射的关系。

在这里插入图片描述
Qt 中的QMap 和c++中的map 功能等同,但用法稍有不同罢了。

QMap 的功能:
自动建立key - value的对应。key 和 value可以是任意你需要的类型,包括自定义类型。

在QMap中的自定义数据类型需要重载运算符 <

QMap 的使用:
QMap对象是模板类,需要关键字和存储对象两个模板参数:
QMap<int, string> personnel;
这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.

既然QMap是一个有序的容器。对此容器的操作无非就是增删改查

1、插入:

//定义一个mapStudent的map数据对象
QMap<int, string> mapStudent;
//insert 方式插入
mapStudent.insert(000,"student_one");
//数组“array”方式输入
mapStudent[001] = "student_two";

这里有两种方式来插入:1、操作符 [] 2、insert 方式

注意:不管那种方式,如果前后插入的键值相同,那么后一个插入的数据会覆盖前一个数据。

2、查找:

查找的方式有三总:1、操作符[] 2、contains() 3、value()
但是,我们推荐使用后两种,因为"操作符[]" 会在找不到键的情况下 ,默认会插入数据。例如下面的代码中,会创建1000 项目。

// WRONG
QMap<int, QWidget *> map;

for (int i = 0; i < 1000; ++i) {
if (map[i] == okButton)
cout << "Found button at index " << i << endl;
}

运用 contains():

int timeout = 30;
if (map.contains(“TIMEOUT”))
timeout = map.value(“TIMEOUT”);

使用value()

int timeout = map.value(“TIMEOUT”, 30);

上面两端代码是等价的。当找不到键“TIMEOUT”,将timeout变量的值赋值为30,如果找到,那就将找到的值赋值给变量timeout。

3、遍历

Java 风格:使用QMapIterator

QMapIterator<QString, int> i(map);
while (i.hasNext()) {
i.next();
cout << i.key() << ": " << i.value() << endl;
}

STL 风格:使用 iterator

QMap<QString, int>::const_iterator i = map.constBegin();
while (i != map.constEnd()) {
cout << i.key() << ": " << i.value() << endl;
++i;
}

如果你需要将QMap中的所有的值遍历出来,而不需要键也遍历出来,可以这样写:

QMap<QString, int> map;

foreach (int value, map)
cout << value << endl;

4、删除

1、remove(): 移除你想要给定的键的任何一项
2、clear() 清空对象
3、take(),移除你想要给定的键的任何一项,,并返回该键下对应的值。

5、其他操作:

1、count(const Key &key) 返回该键下的数据项有几项。

2、empty() 等同于 isempty() 容器是否为空

3、keys() 返回所有键的列表

4、size() 返回键值对的数量

5、 swap(QMap<Key, T> &other) 与另一个容器map 交换

6、 take(const Key &key) 删除该键下的键值对,并返回改建所对应的值

6、unite(const QMap<Key, T> &other) 将另一个map中的键值对插入到本map中。

7、QList QMap::values() const 返回值列表

8、lower_bound() 返回键值>=给定元素的第一个位置

9、 upper_bound() 返回键值>给定元素的第一个位置


http://chatgpt.dhexx.cn/article/m5WEiGFi.shtml

相关文章

Qt容器:QMap

一、描述 QMap<Key, T> 是 Qt 的通用容器类之一。 它存储&#xff08;键&#xff0c;值&#xff09;对并提供按键快速查找。 二、成员函数 1、QMap::const_iterator constFind(const Key &key) 返回一个 const 迭代器&#xff0c;该迭代器指向map中具有 key 键的项…

java swing 实现简单计算器

gitee仓库地址&#xff1a;Calculator: 简单计算器 (gitee.com)https://gitee.com/misaka10000/calculator 常量定义&#xff1a; package com.wuzihao.calculator;import java.awt.*;public class Constant {public static final String NAME "简单计算器";publi…

C++实现“简单计算器”

最近在看九度上面的题目&#xff0c;其中一道题本以为比较简单&#xff0c;但花了不少时间&#xff0c;题目如下&#xff1a; 题目1019&#xff1a;简单计算器 我的思路是先读入一个字符串&#xff0c;再将字符串里面的数字和运算符号分别提取出来&#xff0c;最后根据运算的…

C++ 简单计算器

C实现简单的计算器 实现一个简单的计算器&#xff0c;可以实现对数字的加减乘除运算并输出显示结果。 完整代码 #include <iostream> using namespace std;int main() {char op;float num1, num2;cout << "输入运算符&#xff1a;、-、*、/ : ";cin &…

简单的计算器

实例说明 从键盘上输入数据并进行加、减、乘、除四则运算&#xff08;以“a运算符b” 的形式输入〕&#xff0c;判断输入的数据是否可以进行计算&#xff0c;若能计算&#xff0c;则输出计算结果。 实现代码 实现结果

C语言实现简单计算器

C语言实现简单计算器 一、背景二、代码1、数据结构2、弟弟行为的编程三、基本逻辑中缀转后缀&#xff08;1&#xff09;为什么要转&#xff08;2&#xff09;怎么转&#xff08;3&#xff09;注意事项 四、演示图片 一、背景 自己希望通过这个处女帖&#xff0c;来互相学习、经…

PHP实现简单计算器

目录 一、题目&#xff1a; 二、基本界面设计代码&#xff1a; 三、分析&#xff1a; 四、实现编程三个步骤 五、完整实现代码 一、题目&#xff1a; 题目描述&#xff1a;下列列表框中有、-、*、/四种运算符&#xff0c;选择不同的运算符进行&#xff0c;单击计算按钮进行不…

Linux:简单计算器

四则运算 vim一下1. 思路2. 代码分析及展示3. 运行结果 vim一下 用vi编写一个简单的四则运算程序&#xff0c;可以接受键盘输入的两个数和一个运算符号&#xff0c;并在控制台输出结果。 1. 思路 从键盘输入变量的值&#xff0c;获取这个值调用加减乘除这些函数&#xff0c;…

HTML实现简单计算器

简单计算器 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>简易计算器</title><style type"text/css">*{margin: auto;padding: 0px;text-align: center;font-family: "微软雅黑";}.con…

C语言实现简单计算器程序

简单计算器程序 编写一个简单计算器程序&#xff0c;输入格式为&#xff1a;data1 op data2。其中data1和data2是参加运算的两个数&#xff0c;op为运算符&#xff0c;它的取值只能是、-、*、/。。要求必须使用switch-case语句实现。 输出结果精确到小数点后2位&#xff1a;如…

AndroidStudio案例——简单计算器

效果展示 实验内容及步骤 设计一款带有可视化界面的简单计算器&#xff0c;供用户输入数据并查看结果。用户通过点击相应按钮&#xff08;加减乘除运算符、等号、数字&#xff09;输入正确的表达式&#xff0c;计算器进行相应的加减乘除运算&#xff0c;且可以进行小数和整数的…

Android简单计算器

文章目录 一、案列一、步骤1、activity_main.xml2、colors.xml3、strings.xml4、图片 一、案列 实现简易计算器 一、步骤 线性布局实现计算器&#xff0c;一个线性垂直布局里嵌套多个线性水平布局&#xff0c;插入文本框&#xff0c;编辑框&#xff0c;按钮多个控件&#x…

19:简单计算器

原题链接 总时间限制: 1000ms 内存限制: 65536kB 描述 一个最简单的计算器&#xff0c;支持, -, *, / 四种运算。仅需考虑输入输出为整数的情况&#xff0c;数据和运算结果不会超过int表示的范围。 输入 输入只有一行&#xff0c;共有三个参数&#xff0c;其中第1、2个参数…

python制作简单计算器

​ 做一个计算器&#xff0c;这是我们想要的效果。 1、准备工作 导入time、tqdm、math库 from tqdm import* from time import* from math import*2、开始 添加一个重复循环并添加变量s while True:#清屏print(\033c)while True:#如果用法输入的是str类型将打印输入错误&…

JavaScript实现简单计算器

一、两个输入框输入数值计算 步骤 1、编写html代码&#xff0c;实现计算器页面视图效果 2、编写js&#xff0c;实现点击输入数字和符号输出结果 1、编写html 1.1定义两个输入框和一个隐藏框。 1.2定义加减乘除四个按钮&#xff0c;并在里面设置一个单击事件onclick&#…

Java编写简单计算器

本文用Java的swing来实现一个简单计算器&#xff0c;主要内容为图形用户界面GUI的实现以及运算表达式核心算法的设计编写。 程序运行环境为Windows10 &#xff0c;编译环境为IntelliJ IDEA Community Edition 2022.2.3 一、具体功能&#xff1a; 1、&#xff1a;输入&#x…

项目一:简单计算器的实现

项目概述 1.1项目目标和主要内容 学习图形界 面的设计&#xff0c;利用 MFC 应用程序&#xff08;Java swing 或 QT 框架&#xff0c;或 C#&#xff09;创建基于对话框的应用程序&#xff0c;添加按钮、编辑框等控件&#xff1b; 能通过设计的按钮控件输入并实现简单算术运算&a…

【C语言】实现简易计算器

目录 1.实现逻辑 2.运行过程 3.优化前代码分析 主函数 计算函数 4.优化后代码分析 主函数 计算方法函数 输入操作数的函数 5.完整代码展示 1.实现逻辑 实现一个简易的计算器&#xff0c;可以计算两个整数的加减乘除 2.运行过程 3.优化前代码分析 主函数 int main()…

java工作流引擎,roadflow(一个强大的工作流引擎)

JAVA工作流引擎(J-RoadFlow) J-RoadFlow工作流平台是知名的.NET工作流引擎RoadFlow的JAVA移植版。该工作流平台由从事多年OA和工作流实施及开发的团队研发&#xff0c; 采用最简单的SM架构实现大中小企业中日常复杂业务流程审批。JAVA版不仅仅是.NET版本的移植&#xff0c;从架…

Easy-Flows - Java的简单愚蠢的工作流引擎

The simple, stupid workflow engine for Java 源代码名称&#xff1a;easy-flows源代码网址&#xff1a;http://www.github.com/j-easy/easy-flowseasy-flows 源代码文档easy-flows 源代码下载 Git URL git://www.github.com/j-easy/easy-flows.git Git Clone 代码到本地 g…