STL之unordered_map map 排序 嵌套

时间:2022-05-10 23:16:13

一、介绍

无序映射表(Unordered Map)容器是一个存储以键值对组合而成的元素的关联容器。底层数据结构二叉平衡树(红黑树)。
运行效率方面:unordered_map最高,hash_map其次,而map效率最低。需要无序容器时候用unordered_map,有序容器时候用map。

二、访问函数

函数 作用
operator[] 访问函数
at 访问函数

二、迭代函数

函数 作用
begin 返回指向容器起始位置的迭代器(iterator)
end 返回指向容器末尾位置的迭代器
cbegin 返回指向容器起始位置的常迭代器(const_iterator)
cend 返回指向容器末尾位置的常迭代器
for(map<int, string>::iterator it = mapS.begin(); it != mapS.end(); it++)
Cout<<it->first<<" "<<it->second<<end;
int nSize = mapS.size()
for(int i = 1; i<= nSize; i++)
Cout<<mapS[i]<<end; //key需为数值

三、容量函数

函数 作用
size 返回有效元素个数
max_size 返回 unordered_map 支持的最大元素个数
empty 判断是否为空

四、修改函数

函数 作用
insert 插入元素
erase(it) 删除元素
swap 交换内容
clear 清空内容
mapS.insert(pair<int, string>(1, “1111”));
mapS.insert(map<int, string>::value_type (1, “11”));
mapS.insert(make_pair<int, string>(4,“11”));
mapS["aaaa"] = “aaaaaaa”;

四、操作函数

函数 作用
find 通过给定主键查找元素,返回位置
count 返回匹配给定主键的元素的个数,可用于判断是否有该key,无法知道所在位置,存在返回1,否在返回0
equal_range 返回值匹配给定搜索值的元素组成的范围
map<int,string >::iterator it;
it=mapS.find("key"); //没找到返回map.end()
if(it!=mapS.end())
mapS.erase(it);

五、其他

根据key值排序:

template <class T> struct greater : binary_function <T,T,bool> {
bool operator() (const T& x, const T& y) const
{return x>y;}
};
map<string, int, greater<string> > name_map;
struct CmpByKeyLength {
bool operator()(const string& k1, const string& k2) {
return k1.length() < k2.length();
}
};
map<string, int, CmpByKeyLength> name_map;

根据value值排序:

struct CmpByValue {
bool operator()(const PAIR& lhs, const PAIR& rhs) {
return lhs.second < rhs.second;
}
};
vector<PAIR> name_score_vec(name_score_map.begin(), name_score_map.end());
//需要将其转成vector排序,不如直接使用vector。
sort(name_score_vec.begin(), name_score_vec.end(), CmpByValue());

嵌套map及遍历:

map<int,map<int,string> >::iterator multitr; //嵌套
map<int,string>::iterator intertr;
for(multitr=multiMap.begin();multitr!=multiMap.end();multitr++)
{
for(intertr= multitr ->second.begin(); intertr != multitr ->second.end(); intertr ++)
cout<< multitr ->first<<" "<<intertr->first<<" ("<< intertr -> second <<")"<<endl;
}