前言提示:以下是本篇文章正文内容,下面案例可供参考`
一、C++中的哈希结构简介
C++中有三种常见的哈希结构:
1、数组
2、set
C++中的set结构有三种:
std::set
1、底层实现为红黑树
2、集合里的元素是有序并且无重复
3、查找和增删的效率都为对数级
std::multiset
1、底层实现为红黑树
2、集合里的元素有序并且可以重复
3、查找和增删的效率都为对数级
std::unordered_set
1、底层实现是哈希表
2、集合里的元素无序
3、查找和增删的效率最高(不要求元素有序的情况下,建议使用)
关于set的基本用法
/*
set<int> s; //初始化一个数据类型为int的集合t(第一种set)s
s.insert(n); //向集中添加一个元素n
s.insert({2, 3}); // 插入多个元素
s.find(n) //查询n是否在集合s中,如果在集合s中返回对应元素的迭代器,元素不存在返回end()迭代器
s.erase(n) //从集合中移出一个元素
s.count(n) //因为std::set中元素无重复,因此某一个元素在集合中出现的次数只有0和1
s.size() //统计集合s的大小
*/
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int> s;
s.insert({3,5,6});
//对set进行遍历输出
for (auto it = s.begin(); it != s.end(); ++it)
{
cout << *it << endl;
}
//查找元素是否存在
if(s.find(5)!=s.end())
{
cout<<"find 5"<<endl;
}
else
{
cout<<"not find!"<<endl;
}
s.erase(2);
cout<<"2在集合s中出现的次数: "<<s.count(2)<<endl;
cout<<"集合s的大小是: "<<s.size()<<endl;
return 0;
}
3、map
map与set不同的是:map里的数据结构为<key,value>
如果我们既要存储元素值又要存储下标考虑使用map
C++中的map结构有三种:
std::map
1、底层实现为红黑树
2、集合里的元素是有序并且无重复
3、查找和增删的效率都为对数级
std::multimap
1、底层实现为红黑树
2、集合里的元素有序并且可以重复
3、查找和增删的效率都为对数级
std::unordered_map
1、底层实现是哈希表
2、集合里的元素无序
3、查找和增删的效率最高(不要求元素有序的情况下,建议使用)
关于map的基本用法
/*
mapt<char,int> mymap; //初始化一个map
mymap.insert(pair('c',3)); //使用insert方法插入键值对
mymap['c'] = 3; // 插入键值对
mymap.find(n) //查询n是否在集合s中,如果在集合s中返回对应元素的迭代器,元素不存在返回end()迭代器
mymap.erase(n) //移出键值对
mymap.count(n) //因为std::m ap中元素无重复,因此某一个元素在集合中出现的次数只有0和1
map.size() //统计大小
*/
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<char,int> mymap;
mymap['a'] = 1;
mymap['b'] = 2;
//对map进行遍历输出
for (auto pair = mymap.begin(); pair != mymap.end(); ++pair)
{
cout<<"key: "<<pair->first<<","<<"value: "<<pair->second<<endl;
}
//查看键值是否存在
auto it = mymap.find('a');
if(it!=mymap.end())
{
cout<<"value: "<<it->second<<endl;
}
//删除键
mymap.erase('a');
cout<<"'b'在map中出现的次数: "<<mymap.count('b')<<endl;
cout<<"map的大小是: "<<mymap.size()<<endl;
}
总结
提示:这里介绍了C++中set和map的基本使用方法: