一、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);
}
}