Qt的容器类——QMap

定义:QMap< Key,T > 提供一个以红蓝树为基础的字典,元素是关联数组,由键和值构成,一个键映射到一个值。

  • QHash与QMap的功能差不多,但QHash的查找速度更快
  • QMap是按照键的顺序存储数据,而QHash是任意顺序存储的
  • QMap的键必须提供"<“运算符,而QHash的键必须提供”=="运算符和一个名为qHash()的全局散列函数。

1. 初始化

QMap<QString,int> map;		//定义QMap,存储数据类型为<QString,int>,键类型为QString,键映射的数据项类型为int

2. 插入

map["one"] = 1;				//插入键值对
map["one"] = 2;				//一个键只能对应一个值,之前的值会被覆盖
map["three"] = 3;    
map.insert("four",4);		//插入键值对
map.insertMulti("four",4);  //插入键值对,可以一个键对应多个值,在QMap中最好不要这样用

3. 访问

map["one"] = 1;				
map["two"] = 2;				
map["three"] = 3; 
map.insertMulti("three",4); 

int aaa = map.value("one");				//一对一用value,在map中搜索指定的键"one"对应的数据项
										//如果在map中没有搜索到指定的键,会返回一个缺省构造值。
int bbb= map.value("one",30);			//可以指定搜索不到时的默认返回值
QList<int>list1 = map.values("three");	//一对多时用values,在map中搜索指定的键"three"对应的所有数据项。
QList<int>list2 = map.values();			//返回map中所有的数据项

int ccc = map.first();					//返回最小键对应的数据项的引用
int ddd = map.last();					//返回最大键对应的数据项的引用	
QString eee = map.firstKey();			//返回最小键
QString fff = map.lastKey();			//返回最大键

4. 操作

map.clear();							//清除map内的所有元素
int ggg = map.size();					//返回map中键值对的个数
int hhh = map.remove("one");			//删除指定键值"one"对应的元素,返回删除的元素个数,返回0则没有该键值
bool iii = map.isEmpty();				//判断map内是否有元素

5. 用Java风格迭代器进行遍历

//Java迭代器指针不指向一个数据项,而是指向数据项之间
QMapIterator<QString,int> i(map);		//定义只读迭代器QMapIterator,默认指向第一个数据项之前

i.toFront();                        	//迭代器移动到最前面(第一个数据之前)
while(i.hasNext())						//i后面还有元素
{
	qDebug() << i.next().key();		    //返回i后面的元素,并且迭代器后移一个位置,返回该元素的键值
	qDebug() << i.previous().value();	//返回i前面的元素,并且迭代器前移一个位置,返回该元素的数据项			
}
bool jjj = i.findNext("three");			//向前查找键"three"对应的值,若找到则返回true,并且迭代器后移一个位置
bool kkk = i.findPrevious("three");		//向后查找键"three"对应的值,若找到则返回true,并且迭代器前移一个位置

QMutableMapIterator<QString,int> i(list);   //定义读写迭代器QMutableMapIterator
i.remove();                             //删除刚刚用next(), previous(), findNext(), findPrevious()函数跳过的元素

6. 用STL风格迭代器进行遍历

//STL风格迭代器是数组的指针,直接指向数据项
QMap<QString,int> map;
QMap<QString,int>::const_iterator i;				//定义只读迭代器const_iterator
for(int i = map.cbegin();i != map.cend();i++)
	qDebug() << i.key() << " : " << i.value();

QMap<QString,int>::iterator i;						//定义读写迭代器iterator
for(i = map.begin();i != map.end();i++)		   
	qDebug() << i.key() << " : " << i.value();

7. 用foreach进行遍历

QMap<QString,int> map;
foreach(const QString &str,map.keys()) //访问所有键	QList<Key> QMap::keys(const T &value) const
	qDebug() << str << " : " << map.value(str);

//对于多值映射,可以使用两重foreach语句
QMultiMap<QString,int> map;
foreach(const QString &str,map.uniqueKeys()) //访问所有键,一对多的键只出现一次,QList<Key> QMap::uniqueKeys() const 
{
	foreach(int i,map.values(str))	//访问值,i为键对应的所有值 QList<T> QMap::values(const Key &key) const
		qDebug() << str << " : " << i;
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值