structIntHash{std::size_toperator()(intk)const{returnstd::hash<int>()(k);}};structIntEqual{booloperator()(intlhs,intrhs)const{returnlhs==rhs;}}; 最后,声明unordered_set时使用这些函数对象: 代码语言:cpp 复制 std::unordered_set<int,IntHash,IntEqual>my_set; 在这个例子中,IntHash函数...
hash<Key>通过相应的hash函数,将传入的参数转换为一个size_t类型值,然后用该值对当前hashtable的bucket取模算得其对应的hash值。而C++标准库,为我们提供了基本数据类型的hash函数: 整型值:bool、char、unsigned char、wchar_t、char16_t、char32_t、short、int、long、long long、unsigned short、unsigned int、u...
int main() { // 创建一个整数类型的 unordered_set std::unordered_set<int> uset; // 插入元素 uset.insert(10); uset.insert(20); uset.insert(30); // 打印 unordered_set 中的元素 std::cout << "Elements in uset: "; for (int elem : uset) { std::cout << elem << " "; }...
unordered_set是一种关联容器,set和map内部实现是基于RB-Tree,是有序的,unordered_set和unordered_map是基于hashtable。是无序的。 模板原型: template<class Key, class Hash=hash<Key>, class Pred=equal_to<Key>, class Alloc=allocator<Key>, >class unordered_set; 定义 unordered_set<int> hash; 操作 ...
当key不是int类型而是string时,就不能取余数了。那该怎么办呢? 这里需要用到仿函数,如下图: 当key可以强转成整形时(比如负数,指针等),用缺省的仿函数即可。当key是string这种不能强转成整形的类型时,就要手动写一个转换成整形的仿函数。上方是取string的第一个字符进行返回。同时也要手动传入这个仿函数。
然后就是第六行我们定义了一个整型int的集合,叫myset。 后面几行,我们演示了insert/find/erase的用法。 有两点需要注意: 一是这个容器是个集合,所以重复插入相同的值是没有效果的。大家可以看到我们这里第7行和第9行插入了2次3,实际上这个集合里也只有1个3,第10行输出的结果是2。
使用哈希表的方式的优点和hashtable相同,这个就不必再叙述。在C++中的unordered_set中的简单使用: #include <iostream> #include <unordered_set> //导入库 using namespace std; int main(){ unordered_set<string> names; cout<<names.size()<<endl; names.insert("zhangsan"); cout<<names.size()<<endl...
Key(键/值类型):这是在unordered_set中存储的元素类型。例如,如果您想要创建一个存储整数的unordered_set,则将Key设置为int。 Hash(哈希函数类型):这是用于计算元素哈希值的函数对象类型。默认情况下,它是std::hash<Key>,它提供了针对大多数内置类型的哈希函数。您也可以提供自定义的哈希函数。
直接当作普通的hash函数来使用吧,看下面这个例子: //CPP program to illustrate the//unordered_set::hash() function#include<iostream>#include<string>#include<unordered_set>usingnamespacestd;intmain() { unordered_set<string>sampleSet;//use of hash_functionunordered_set<string>::hasher fn =sampleSet...
unordered_map<string,int> my_map; my_map.insert(make_pair("c++",100)); my_map.insert(make_pair("java",98)); cout<<my_map["java"]<<endl; auto itr = my_map.find("java"); cout<<itr->first<<", "<<itr->second<<endl; ...