C++11:14unordered container无序容器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++11:14unordered container无序容器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1578字,纯文字阅读大概需要3分钟。
内容图文
![C++11:14unordered container无序容器](/upload/InfoBanner/zyjiaocheng/633/e4a826d82a4247e0a7b87130a201ebda.jpg)
14unordered container无序容器
0、课前秀
- 比起有序容器,无序容器(unordered_map/unordered_multimap和unordered_set/unordered_multiset)里的元素是不排序的。
- map和set内部是红黑树,插入元素时会自动排序,无序容器用的是散列表(Hash Table),通过hash,而不是排序来操作元素,从而效率更高。
1、知识点
- 无序容器和key需要提供hash_value函数,其他用法和map/set的用法是一样的。
- 对于自定义的key,需要提供Hash函数和比较函数。(基本类型的就不需要)
2、代码2-6:无序容器的基本用法
#include<unordered_map>
#include<vector>
#include<bitset>
#include<string>
#include<utility>
struct Key
{
std::string first;
std::string second;
};
struct KeyHash
{
std::size_t operator()(const Key& k)const
{
return std::hash<std::string>()(k.first)^(std::hash<std::string>()(k.second) << 1);
}
};
struct KeyEqual
{
bool operator()(const Key& lhs, const Key& rhs)const
{
return lhs.first == rhs.first && lhs.second == rhs.second;
}
};
int main()
{
//default constructor: empty map
std::unordered_map<std::string,std::string>ml;
//list constructor
std::unordered_map<int,std::string> m2=
{
{1,"foo"},{3,"bar"},{2,"baz"},
};
//copy constructor
std::unordered_map<int,std::string> m3 = m2;
//move constructor
std::unordered_map<int,std::string>m4 = std::move(m2);
//range constructor
std::vector<std::pair<std::bitset<8>,int>> v = {{0x12,1},{0x01,-1}};
std::unordered_map<std::bitset<8>,double>> m5(v.begin(),v.end());
//constructor for a custom type
std::unordered_map<Key, std::string, KeyHash, KeyEqual> m6={
{{"John","Doe"},"example"},
{{"Mary","Sue"},"another"}
};
}
ReadMe
- 20200504看完第1版,《深入应用C++11》的2.4。
- 代码也没调一下,只是初略的看一下内容。
内容总结
以上是互联网集市为您收集整理的C++11:14unordered container无序容器全部内容,希望文章能够帮你解决C++11:14unordered container无序容器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。