【QT】QMap、std::map、unordered_map的使用,设计插入顺序排序“map”的实现

一、map介绍

1.map属于关联式容器,其底层结构是通过二叉树实现。
2.是一个将key和value关联起来的容器,它可以高效的根据单个key值找对应的value
3.key值应该是唯一的,key和value的数据类型可以不相同

二、QMap的简单使用(插入会自动排序)

///int类型键,QString类型值
QMap<int,QString> map;
map.insert(1,"127.0.0.1");///插入数据
map.insert(3,"192.168.0.1");
map.insert(2,"192.168.0.5");
遍历数据
QMap<int,QString>::const_iterator iter=map.constBegin();迭代器
while(iter!=map.constEnd())
{
     qDebug()<<iter.key()<<","<<iter.value();
     ++iter;
}
for(QMap<int,QString>const_iterator itr= map.constBegin();itr!=map.constEnd();itr++)
{
    qDebug()<<itr.key()<<","<<itr.value();
}
///根据键值查找对应的值
if(map.contains(2))///是否包含某个键
{
   QString str=map.value(2);
   qDebug()<<str;///打印输出:192.168.0.5
}
///修改值
map.insert(1,"192.168.3.11");
map[1]="192.168.3.11";
 qDebug()<<map.value(1;///打印输出:192.168.3.11
///删除
map.remove(1);///删除某个键
map.clear();删除全部

三、std::map的简单使用(插入会自动排序–按照key升序)

std::map<int, std::string> map; 
map.insert(std::make_pair(1, "127.0.0.1"));  
/获取键对应迭代器
auto it = map.find(5);  
删除内容
  if (it != map.end()) {  
        map.erase(it);  
   } 

四、unordered_map的简单使用(插入不排序–不是按照插入顺序是乱序)

 unordered_map<int, std::string>  map; // 声明unordered_map对象
map.insert(mark_pair<int, std::string>(2,"127.0.0.1"));
map.insert(unordered_map<int, std::string>::value_type(3,"192.168.3.12"));
// 遍历
unordered_map<int, std::string>::iterator iter;
for(iter=map.begin();iter!=map.end();iter++)
		cout<<iter->first<<ends<<iter->second<<endl;
// 查找
if((iter=map.find(2))!=map.end())
		cout<<iter->second<<endl;

五、按插入顺序

vector存储数据按照插入顺序,允许重复

std::vector<std::pair<int, QSet<QString>>> m_Test;
///插入
 QSet<QString> setStr.insert("11");
 m_Test.push_back(std::make_pair(1, setStr));
 setStr.insert("12");
  m_Test.push_back(std::make_pair(2, setStr));
///遍历
 for (int i=0;i<m_Test.size();i++)
{
	qDebug()<<m_Test.at(i).first<<";"<<m_Test.at(i).second;			
}
长度大于5,删除先插入数据
 std::vector<std::pair<int, QSet<QString>>>::iterator itr = m_Test.begin();
while (itr != m_Test.end())
{
    if (m_Test.size() > 5)
	{
	qDebug() << QString("删除缓存数据,数据信息为:int=%1").arg(itr->first);
	itr=m_Test.erase(itr);
	 }
	 else {
		///itr++;
		 break;
	 }
}

删除单个
for (int i=0;i<m_Test.size();i++)
	{
		if (m_Test.at(i).first==1)
		{
			m_Test.erase(m_Test.begin() + i);
		}
	}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值