一、介绍
无序映射表(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;
三、容量函数
函数 |
作用 |
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");
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());
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;
}