QMap简单用法

QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个直,并且按照Key的次序存储数据,这个类也支持一键多值的情况,用类QMultiMap

QHash具有和QMap几乎完全一样的APi,此类维护这一张哈希表,表的大小和数据项是自适应的,QHash是以任意的顺序住址他的数据,,当然了他也是可以支持一键多值的,QMultiHash

两种之间的区别是:

QHash查找速度上显著于QMap

QHash以任意的方式进行存储,而QMap则是以key顺序进行存储.

Qhash 的键类型必须提供operator==()和yige 全局的qHash(key)函数。而QMap的键类型key必须提供operator<()函数.

他们同样也是有两种风格的迭代容器。用来进行遍历的。

///QMap<Key,T(value)> and QHash<K,T>

#include <QtCore/QCoreApplication>
#include <qmap.h>
#include <qdebug.h>

int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);

	QMap<QString,int> map;
	map.insert("eins o",1);
	map.insert("sieben",7);
	map["a test"]=23;
	//Normally, a QMap allows only one value per key. 
	//If you call insert() with a key that already exists in the QMap, 
	//the previous value will be erased
	map["a test"]=13;

	int val=map.value("a test");
	qDebug()<<val;

	int val2=map.value("error");
	qDebug()<<val2;    ///0

	int val3=map.value("error2",20);
	qDebug()<<val3;

	int val4=map.value("a test",40);
	qDebug()<<val4;
	using a java-style iterator
	QMapIterator<QString,int> iter(map);
	while(iter.hasNext())
	{
		iter.next();  ///放在前面
		qDebug()<<iter.key()<<" "<<iter.value();
	}
	using an Stl-style iterator 
	QMap<QString,int>::ConstIterator i=map.constBegin();
	while(i!=map.constEnd())
	{
		qDebug()<<i.key()<<": "<<i.value();
		++i;
	}

	QMap<QString,int>::Iterator it;
	it=map.find("sieben");
	if(it!=map.end())
		it.value()=8;

	for(QMap<QString,int>::ConstIterator ite=map.constBegin(); ite!=map.constEnd(); ++ite)
		qDebug()<<ite.key()<<": "<<ite.value();

	return 0;//a.exec();
}
结果:

13
0
20
13
"a test"   13
"eins o"   1
"sieben"   7
"a test" :  13
"eins o" :  1
"sieben" :  7
"a test" :  13
"eins o" :  1
"sieben" :  8
请按任意键继续. . .

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值