C++STL学习笔记 STL周边知识点

一、一个万用的Hash Function

1、形式1:函数形式

#include <functional>

class Customer{
    // ...
};

size_t customer_hash_func(const Customer& c){

  //  return ...;
}

int main(){
    unordered_set<Customer,size_t(*)(const Customer&)> custset(20,customer_hash_func);
}

2、形式2:类形式

#include <functional>

class Customer{
    // ...
};

class CustomerHash{
public:
    std::size_t operator()(const Customer& c)const{
        //return ...;
    }
};

int main(){

    unordered_set<Customer,CustomerHash> custset;
}

源码实例

unordered_set底层容器使用的哈希表。

函数执行的顺序如下,

(1)首先进入main函数中,红色箭头所指的行,进入之后,会调用Customer的构造函数,即1;

(2)在执行hh(CustomerHash)的()重载运算符,即2;

(3)根据hash_val函数寻找其对应重载的函数,找到3;

(4)接下来执行4,4的函数里面是一个递归,会执行5;

(5)直到args里面的参数仅有一个的时候会执行6。

存在问题:

我创建unordered_set<Customer,CustomerHash> setx,但是调用setx.insert(Customer("ace","han",1));  会失败,有会的可以讨论一下怎么处理。

3、形式3:以struct hash偏特化形式实现Hash Function

二、Tuple(元组)

1、tuple的简单代码测试

2、Tuple节录并简化版本

3、tuple的继承关系

以tuple<int,float,string>为例,tuple<int,float,string>继承tuple<float,string>,tuple<float,string>继承于tuple<string>,tuple<string>继承于tuple<>。

三、type traits

1、用法

该头文件定义了一系列类,以获得有关编译时的类型信息。

头文件包含:

  • Helper类:帮助创建编译时常量的标准类。
  • 类型特征:以编译时常量值的形式获取类型特征的类。
  • 类型转换:类通过将特定的转换应用于现有类型来获取新类型。

类型的基本特征是可以对其进行分类的类别。这是有关这些类别如何重叠的图表:

C++11的type_traits

type_trais测试

在mian函数中添加

(1)int类型测试

(2)结构体类型测试

(3)类测试

2、type_traits实现is_void

3、type_traits实现is_integral

4、type_traits实现is_move_assignable

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值