在程序中,Map是一个很有用的数据结构。它以“键-值”的形式保存数据。在使用的时候,通过提供字符标示(键)即可得到想要的数据。
这个“数据”即可以是一个字符串,也可以是任意对象,当然也包括自己定义的类对象。
说明:map是以值传递的形式保存数据的。
1. 基本应用
下面以“键-值”都是QString的例子说明QMap的基本使用方法。更详细的说明,请查看《Qt帮助手册》或其他资源。
#include <qmap.h>
#include <iostream>
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<QString,QString>::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<QString,QString>::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<QString,QString> m_map; //定义一个QMap对象
};
调用类函数showMap(),显示结果:
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 <qstring.h>
#include <qmap.h>
#include <qstring.h>
//自定义一个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<QString, Employee> 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 50
转自:http://xy2403.blog.163.com/blog/static/2577263201032113724661/
相关推荐
因为在输出键的时候,不需要使迭代点移动到下一个位置,所以调用了QMapIterator<T,T>::key();而在输出值的时候调用了QMapIterator <T,T>::next()。 (b) if(mi.findNext("111"))、mi.setValue("010"):首先查找某个...
请参阅此处以获取更多信息: : ##公共变量: bool ##公共职能: QStringList QList <QVariant> QPair <QString> QString QVariant值(QString键) QString toString() QMap <QString> toMap() QHash <QString> ...
使用 Qt/C++ 编写的易于使用的 HTTP 客户端 ... QMap<QString> headers; headers. insert ( " Accept " , " text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 " ); HttpRequest
由QMAP改写的简易CMAP类
5.保证无毒 1.简单,方便,实用 3.实例可以自行改用 1.如有非法,本人无法律责任! 8.更多作品,查找标签“朱建强”7.... 4.如需联系我请看左边数字!1.如不知代表何物,那就放弃计算机吧! 0....CSDN老板不让我上传联系方式。
其实就是一个键值对的集合,经常使用的。具体更详细还得看看帮助文档 QMap/QMultiMap属于关联式容器,其底层结构是通过二叉树实现,故其查找value的效率很快。QMap中的数据都是成对出现的,第一个称为key(键),第...
Qmap 与map 的用法 集合 打包 网络资源总结
qmap_brochure from hanguo
米迪 在 Qt 中支持 MIDI 的一种简单的跨平台方式。 支持 MIDI 输出和 MIDI 文件 I/O。...QMap<QString> vals = QMidiOut::devices(); QMidiOut midi; midi.connect( /* one of the keys (IDs) from `de
Qt容器类比较典型的就是QList,QMap,遍历器的使用分为STL风格和Java风格。
python库。 资源全名:jkq.qmap-1.2.1.tar.gz
QMAP-用C ++编写的用于量子电路映射的JKQ工具 基于 , 提出的方法,提供了一种用于量子电路映射的工具。 A. Zulehner,A。Paler和R. Wille。 “将量子电路映射到IBM QX体系结构的有效方法” 。 IEEE集成电路和系统...
react-qmap:一个对腾讯web地图简单封装的React组件
python库。 资源全名:jkq.qmap-1.5.1-cp37-cp37m-win_amd64.whl
个人总结的Qt模板的使用方法。包括了QList,QStringList,QVector 以及QMap的高级使用方法。
python库。 资源全名:jkq.qmap-1.2.1-cp37-cp37m-macosx_10_9_x86_64.whl
很多时候,我们使用双重map或者hash去处理缓冲区,但是key不够直观,本文,自定义key,解决多重map或者hash的key值问题。文中,使用Qmutimap进行测试,对mutilmap用法不熟悉的同学,可以学习一下,mutimap的用法。