qmap的书写格式linux,QMap 键值存储「建议收藏」

qmap的书写格式linux,QMap 键值存储「建议收藏」Qt中的QMap介绍与使用,在坛子里逛了一圈,发现在使用QMap中,出现过很多的问题,Map是一个很有用的数据结构。它以“键-值”的形式保存数据。在使用的时候,通过提供字符标示(键)即可得到想要的数据。这个“数据”即可以是一个字符串,也可以是任意对象,当然也包括自己定义的类对象。说明:map是以值传递的形式保存数据的。1.基本应用下面以“键-值”都是QString的例子说明QMap的基本使用方法…

大家好,又见面了,我是你们的朋友全栈君。

Qt中的QMap介绍与使用,在坛子里逛了一圈,发现在使用QMap中,出现过很多的问题,Map是一个很有用的数据结构。它以“键-值”的形式保存数据。在使用的时候,通过提供字符标示(键)即可得到想要的数据。这个“数据”即可以是一个字符串,也可以是任意对象,当然也包括自己定义的类对象。说明:map是以值传递的形式保存数据的。

1. 基本应用

下面以“键-值”都是QString的例子说明QMap的基本使用方法。更详细的说明,请查看《Qt帮助手册》或其他资源。

#include

#include

usingnamespacestd;

classMapTest

{

public:

voidshowMap()

{

if(!m_map.isEmpty())return;//判断map是否为空

m_map.insert(“111″,”aaa”);//向map里添加一对“键-值”

if(!m_map.contains(“222”))//判断map里是否已经包含某“键-值”

m_map.insert(“222″,”bbb”);

m_map[“333″] =”ccc”;//另一种添加的方式

qDebug(“map[333] , value is : “+ m_map[“333”]);//这种方式既可以用于添加,也可以用于获取,但是你必须知道它确实存在

if(m_map.contains(“111”)){

QMap::iterator it = m_map.find(“111”);//找到特定的“键-值”对

qDebug(“find 111 , value is : “+ it.data());//获取map里对应的值

}

cout<

qDebug(“size of this map is : %d”, m_map.count());//获取map包含的总数

cout<

QMap::iterator it; //遍历map

for( it = m_map.begin(); it != m_map.end(); ++it ) {

qDebug( “%s: %s”, it.key().ascii(), it.data().ascii());//用key()和data()分别获取“键”和“值”

}

m_map.clear(); //清空map

}

private:

QMap m_map; //定义一个QMap对象

};

#include

#include

using namespace std;

class MapTest

{

public:

void showMap()

{

if(!m_map.isEmpty()) return; //判断map是否为空

m_map.insert(“111”, “aaa”); //向map里添加一对“键-值”

if(!m_map.contains(“222”)) //判断map里是否已经包含某“键-值”

m_map.insert(“222”, “bbb”);

m_map[“333”] = “ccc”; //另一种添加的方式

qDebug(“map[333] , value is : ” + m_map[“333”]); //这种方式既可以用于添加,也可以用于获取,但是你必须知道它确实存在

if(m_map.contains(“111”)){

QMap::iterator it = m_map.find(“111”); //找到特定的“键-值”对

qDebug(“find 111 , value is : ” + it.data()); //获取map里对应的值

}

cout<< endl;

qDebug(“size of this map is : %d”, m_map.count()); //获取map包含的总数

cout<< endl;

QMap::iterator it; //遍历map

for ( it = m_map.begin(); it != m_map.end(); ++it ) {

qDebug( “%s: %s”, it.key().ascii(), it.data().ascii()); //用key()和data()分别获取“键”和“值”

}

m_map.clear(); //清空map

}

private:

QMap m_map; //定义一个QMap对象

};

调用类函数showMap(),显示结果:

map[333] , value is : ccc

find 111 , value is : aaa

size of thismap is : 3

111: aaa

222: bbb

333: ccc

map[333] , value is : ccc

find 111 , value is : aaa

size of this map is : 3

111: aaa

222: bbb

333: ccc

2. 对象的使用

map当中还可以保存类对象、自己定义类对象,例子如下(摘自QT帮助文档《Qt Assistant》,更详细的说明参考之):

以注释形式说明

#include

#include

#include

//自定义一个Employee类,包含fn、sn、sal属性

classEmployee

{

public:

Employee(): sn(0) {}

Employee( constQString& forename,constQString& surname,intsalary )

: fn(forename), sn(surname), sal(salary)

{ }

QString forename() const{returnfn; }

QString surname() const{returnsn; }

intsalary()const{returnsal; }

voidsetSalary(intsalary ) { sal = salary; }

private:

QString fn;

QString sn;

intsal;

};

intmain(intargc,char**argv)

{

QApplication app( argc, argv );

typedefQMap EmployeeMap;//自定义一个map类型,值为EmployeeMap对象

EmployeeMap map;

map[“JD001”] = Employee(“John”,”Doe”, 50000);//向map里插入键-值

map[“JW002”] = Employee(“Jane”,”Williams”, 80000);

map[“TJ001”] = Employee(“Tom”,”Jones”, 60000);

Employee sasha( “Sasha”,”Hind”, 50000 );

map[“SH001”] = sasha;

sasha.setSalary( 40000 ); //修改map值的内容,因为map采用值传递,所以无效

//批量打印

EmployeeMap::Iterator it;

for( it = map.begin(); it != map.end(); ++it ) {

printf( “%s: %s, %s earns %d\n”,

it.key().latin1(),

it.data().surname().latin1(),

it.data().forename().latin1(),

it.data().salary() );

}

return0;

}

#include

#include

#include

//自定义一个Employee类,包含fn、sn、sal属性

class Employee

{

public:

Employee(): sn(0) {}

Employee( const QString& forename, const QString& surname, int salary )

: fn(forename), sn(surname), sal(salary)

{ }

QString forename() const { return fn; }

QString surname() const { return sn; }

int salary() const { return sal; }

void setSalary( int salary ) { sal = salary; }

private:

QString fn;

QString sn;

int sal;

};

int main(int argc, char **argv)

{

QApplication app( argc, argv );

typedef QMap EmployeeMap; //自定义一个map类型,值为EmployeeMap对象

EmployeeMap map;

map[“JD001”] = Employee(“John”, “Doe”, 50000); //向map里插入键-值

map[“JW002”] = Employee(“Jane”, “Williams”, 80000);

map[“TJ001”] = Employee(“Tom”, “Jones”, 60000);

Employee sasha( “Sasha”, “Hind”, 50000 );

map[“SH001”] = sasha;

sasha.setSalary( 40000 ); //修改map值的内容,因为map采用值传递,所以无效

//批量打印

EmployeeMap::Iterator it;

for ( it = map.begin(); it != map.end(); ++it ) {

printf( “%s: %s, %s earns %d\n”,

it.key().latin1(),

it.data().surname().latin1(),

it.data().forename().latin1(),

it.data().salary() );

}

return 0;

}

Program output:

JD001: Doe, John earns 50000

JW002: Williams, Jane earns 80000

SH001: Hind, Sasha earns 50000

TJ001: Jones, Tom earns 60000

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139280.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月7日 上午11:40
下一篇 2022年5月7日 下午12:00


相关推荐

  • e5续订程序_office e5开发者

    e5续订程序_office e5开发者E5调用API续订服务:Microsoft365E5RenewX:功能性:网页访问部分继承于Microsoft365E5RenewWeb并做了部分改进,数据库改进现在支持单用户多运行账号;内核API调用继承于Microsoft365E5RenewPlus;可部署性:支持开放站点部署和私享部署,私享部署不再强制要求配置Https和OAuth平台兼容性:使用Asp.NetCore作为跨平台框架增适用于WindowsLinuxMacOS…

    2022年9月30日
    3
  • C语言——五子棋人机对战

    C语言——五子棋人机对战         先说下背景吧,写下这篇博客时,博主大一在读,C语言初学者,寒假无事,便计划写几个由C语言实现的小游戏以提升编程能力。在这篇博客里分享的是可人机对战的五子棋游戏。         棋类游戏要实现初级的机器智能,其核心思想便是:感知(SENSE)-&gt;思考(THINK)-&gt;行动(ACT)。所以,本文将尽量以这个顺序介绍实现过程。(1)前期准备:    此程序中,机器…

    2022年6月29日
    31
  • mysql索引abc,a=1 and c=2是否可使用索引_sql联合索引

    mysql索引abc,a=1 and c=2是否可使用索引_sql联合索引在一次查询中,MySQL只能使用一个索引。在真实项目中,SQL语句中的WHERE子句里通常会包含多个查询条件还会有排序、分组等。若表中索引过多,会影响INSERT及UPDATE性能,简单说就是会影响数据写入性能。因为更新数据的同时,也要同时更新索引。最实际的好处当然是查询速度快,性能好。MYSQL中常用的强制性操作(例如强制索引)https://www.jb51.net/article/49807…

    2025年9月18日
    9
  • 什么是召回率??

    什么是召回率??最近在学习机器学习的时候经常会看到一个名词 召回率 单看字面意思完全看不出来有没有 搜了一些答案也解释的让人摸不到头脑 可能是大佬们不屑于解答这种小问题了 召回率就是用你查出来的正确的数量除以所有正确的数量 可以跟准确率对比着记忆 准确率是用你查出来的正确的数量除以所有的数量 包含正确和不正确的数量 这就好理解了吧 附上某位大佬的图

    2026年3月18日
    2
  • vue返回上一层不刷新页面_vue嵌套html

    vue返回上一层不刷新页面_vue嵌套html解决嵌套路由刷新时,路由没有变化,正常情况下页面是不会重新渲染的1、在router-view中加上条件渲染v-if默认为true。让它显示出来2、写写一个reload方法,在页面刷新只有,点击某个查询条件的时候调用这个重载的方法这是条件渲染变化了为false在修改数据之后使用$nextTick,条件渲染变化了为true则可以在回调中获取更新后的DOM如果需要带有查询参数…

    2022年10月7日
    5
  • 龙虾最佳适配模型,OpenClaw之父给出了推荐

    龙虾最佳适配模型,OpenClaw之父给出了推荐

    2026年3月13日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号