分享免费的编程资源和教程

网站首页 > 技术教程 正文

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

goqiw 2024-09-14 06:53:58 技术教程 37 ℃ 0 评论

一、一个万用的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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表