20170423STL017_STL_hash容器
2017-04-24 22:37
155 查看
课程回顾:
1:set和map的逻辑是通过红黑自平衡二叉树来完成的,呀里面所有的数据都是已序的,已序的东西进行查找是非常快的。2:已序:
1:存入空间已序:访问速度为O1,直接就可以访问
2:数据值已序:通过二分法来查找,做不到O1,但是还是会很快。
3:set,map都是容器适配器,非序的set和map也是容器适配器(unordered_map,unordered_set)。
hash容器:
1:根据对象产生一个数值,不同对象生成的哈希值可能是一样的,我们就把这些一样的放在一个空间里面(可以使vector里面放list,list里面存储这些值一样的对象),2:当vector里面一个元素(单个list)里面的元素大于vector总长度的时候,就增加vector桶数量(大小一般为质数,以保证数据更均匀)。vector称为一个哈希桶,vector的size就是其桶的数量。
3:一般得出的值为:数据%size。得到的余数为几,就放在vector的哪个空间里面。如果一个list里面的元素超过vector的大小的时候,就可能导致查找效率降低,我们就需要增加vector的桶(质数个)。
4:哈希容器里面的数据并不是按照大小顺序排列的,而是由其他方式排列,他的查找速度也会比较快。
仿函数(函数对象):
1:重在了()的类就称为仿函数。重载括号后,由这个类生成的对象可以当成函数一样的调用。class FunDemo { public: void operator()() { std::cout << "函数对象" << std::endl; } private: int num; };
2:他方便于我们在函数和类的基础上进行扩充。比如:我们需要在vector里面放小于100的随机数:
int RandNum()//如果项目需求,这里不允许传递参数 { return rand() % 100; } int main() { std::vector<int> idemo; idemo.resize(100); std::generate(idemo.begin(), idemo.end(), RandNum); return 0; }
当我们存入的不是100以内,而是按用户输入的来决定,而生成数据的函数有不让传参数,除了用全局变量,还可以使用函数对象来实现。 类里面可以存放数据,同时重载了括号的操作,满足上面的要求,重载了()的类,在使用的时候和普通的类是一样,其对象还可以当作函数使用。
bind:
1:bind就是来做一个函数,可以绑定一些参数到原来的函数,生成新的参数较少的函数。void Fun(int a1, int a2, int a3) { std::cout << a1 << " " << a2 << " " << a3 << std::endl; } typedef void FunType(int, int); int main() { auto Fun1 = std::bind(Fun, std::placeholders::_1, 20, 30);//代表空的参数为第一个参数 Fun1(10);//打印 10 20 30 auto Fun2 = std::bind(Fun, std::placeholders::_1, std::placeholders::_2, 30); //代表生成的函数需传递两个参数,这两个参数代替了原来函数的前两个参数 Fun2(10, 20);//打印 10 20 30 auto Fun3 = std::bind(Fun, 10, std::placeholders::_2, std::placeholders::_1); //代表生成的函数需传递两个参数,这两个参数代替了原来函数的第三个,第二个参数, Fun3(20, 30);//打印 10 30 20 auto Fun4 = std::bind(Fun, std::placeholders::_1, 20, std::placeholders::_2); //代表生成的函数需传递两个参数,这两个参数代替了原来函数的第一个,第三个参数 Fun4(10, 30);//打印 10 20 30 auto Fun5 = std::bind(Fun, 10, std::placeholders::_1, 30);//代替原来第二个参数 Fun5(20);//打印 10 20 30 return 0; }
2:std::placeholders::_1在std::bind函数里面的第几个参数位置就代表会代替原来函数的第几个参数,后面数字是多少就代表生成的函数的第几个参数替换在这个地方。
相关文章推荐
- 20170423STL017_STL_hash容器
- 20170423STL017_STL_hash容器
- 20170423STL017_STL_hash容器
- 20170423STL017_STL_hash容器
- 20170423STL017_STL_hash容器
- 20170423STL017_STL_hash容器
- 20170423STL017_STL_hash容器
- 20170423STL017_STL_hash容器
- 【转】STL中map与hash_map容器的选择
- STL中map与hash_map容器的选择收藏
- STL中map与hash_map容器的选择
- STL中map与hash_map容器的选择
- 【留坑】UVA246 模拟题,STL容器组合_deque&&(set判重 OR hash判重)
- STL中map与hash_map容器的选择
- STL中map与hash_map容器的选择
- STL中map与hash_map容器的选择
- STL中map与hash_map容器的选择 ------------转载
- STL中map与hash_map容器的选择
- STL源码剖析 [容器](二十)[stl_hash_set.h]
- STL中map与hash_map容器的选择