茂名住房和城乡建设部网站,网站建设免费制作,电脑怎么制作app,石家庄情况最新消息今天前言 在C98中#xff0c;STL提供了底层为红黑树的结构的一系列关联式容器#xff0c;在查询时效率可以达到logN#xff0c;即使最差的情况下需要比较红黑树的高度次#xff0c;当树中的节点较多时#xff0c;查询的效率也不是很理想#xff0c;最好的查询是#xff0c;进…前言 在C98中STL提供了底层为红黑树的结构的一系列关联式容器在查询时效率可以达到logN即使最差的情况下需要比较红黑树的高度次当树中的节点较多时查询的效率也不是很理想最好的查询是进行很少的比较次数就能将元素找出来因此在C11中STL又提供了4个unordered系列的关联式容器这四个容器与红黑树结构中的关联容器的使用方法是类似的只是底层结构不同这里只对unordered_map和unordered_set进行介绍。
目录
1.unordered_map 1.1unordered_map的介绍 1.2unordered_map的接口介绍
2.unordered_set 1.unordered_map 1.1unordered_map的介绍 unordered_map的在线文档 1.unordered_map是存储key,value的键值对的关联式容器其允许通过key快速索引到与之关联的value。 2.在unordered_map中键值对是唯一地标识元素而映射值是一个对象其内容与此键关联。键和映射值的类型可能不同。 3.在内部unorderd_map没有对应的key,value,按照特定的顺序排序为了能在常数范围内找到key对应的valueunordered_map将相同哈希值的键值对放到相同的桶中。 4.unordered_map容器通过key访问单个元素的速度要比map快但是它通常在遍历元素子集的范围内的迭代方面效率要低。 5.unordered_map实现了直接访问操作符(operator[])它允许使用key作为参数直接访问value。 6.它的迭代器是前向迭代器只支持正向遍历。 1.2unordered_map的接口介绍 1.unordered_map的构造函数
函数声明函数功能 unordered_map 构造不同类型的 unordered_map对象 2.unordered_map的容量
函数声明函数功能bool empty()const检测unordered_map是否为空size_t size()const获取 unordered_map的有效元素个数 3.unordered_map的迭代器 函数声明函数功能begin()获取unordered_map第一个元素的迭代器end()获取unordered_map最后一个元素下一个位置的迭代器cbegin()获取unordered_map第一个元素的const迭代器cend()获取unordered_map最后一个位置的下一个位置的迭代器 4.unordered_map的元素访问 函数声明函数功能operator[]返回与key对应的value没有一个默认值 注意该函数中实际调用哈系桶的插入操作用参数key与V构造一个默认值往底层的哈系桶中插入如果key不在哈系桶中插入成功返回V()插入失败说明key已经在哈系桶中将对应的value返回。 5.unordered_map的查询
函数声明函数功能iterator find(const K key)返回对应key在哈系桶中的位置size_t count(const K key)返回哈系桶中关键码为key的键值对的个数 注意unordered_map中的key是不能重复的因此count函数的返回值最大是1. 6.unordered_map的修改操作
函数声明函数定义Insert向容器中插入key,value的键值对erase 删除容器中的键值对void clear()清空容器中的有效元素的个数void swap(unorder_map)交换两个容器中的元素 7.unordered_map的桶操作
函数声明函数功能size_t bucket_count()const返回哈系桶的总个数size_t bucket_size(size_t n)const 返回n号桶中有效元素的总个数 size_t bucket(const K key)返回元素所在的桶号 2.unordered_set unordered_set和set的使用别无二致这里推荐参考set的使用,set的使用。 unordered_set的在线文档
#includeiostream
#includeunordered_map
#includeunordered_set
#includeunordered_set
using namespace std;
void TestUnordered_map()
{unordered_mapstring, string ump;//增ump.insert(make_pairstring, string(big, 大));ump.insert(make_pairstring, string(long, 长));ump.insert(make_pairstring, string(short, 短));ump.insert(make_pairstring, string(known, 知道));ump.insert(make_pairstring, string(eye, 眼睛));ump[haha] 哈哈;ump[string];ump[left] 左;for (auto e : ump)cout e.first : e.second endl;std::unordered_mapstring, string ::iterator it ump.begin();while (it ! ump.end()){cout it-first : it-second endl;it;}std::unordered_mapstring,string::iterator it1 ump.find(left);//查it1-second 非左;//改cout it1-first : it1-second endl;ump.erase(string);//删while (it ! ump.end()){cout it-first : it-second endl;it;}
}
void TestUnordered_set()
{//插入std::unordered_setint ust;ust.insert(1);ust.insert(3);ust.insert(5);ust.insert(2);ust.insert(4);ust.insert(6);std::unordered_setint::iterator it ust.begin();while (it ! ust.end()){cout *it ;it;}ust.erase(1);ust.erase(2);std::unordered_setint::iterator it1 ust.find(3);cout endl;cout *it1 endl;it ust.begin();while (it ! ust.end()){cout *it ;it;}
}