常用

  1. #include <string>
  2. #include <vector>
  3. #include <deque>
  4. #include <queue>
  5. #include <stack>
  6. #include <list>
  7. #include <set>
  8. #include <map>
  9. #include <algorithm> // 算法
  10. #include <numeric> // 算法
  11. #include <functional> // 算法
  12. using namespace std;
  13. #include <locale.h> // for mbstowcs() / wcstombs()

hashmap

map

map使用红黑树实现。查找时间在O(lg(n))-O(2*log(n))之间,构建map花费的时间比较长,因而,map使用于那种插入和查询混合的情况。如果是先插入后查询的情况,可以考虑使用vector_map.

unordered_map

STL中的实现叫做unordered_map,需要引入#include ,都是基于hash_table实现的。首先,分配一大片内存,形成很多桶。利用hash函数,将key映射到不同的桶中,当然,也有可能会有两个不同的key映射到同一个桶中,这是,就需要判别函数来进行查找了。所以,hash_map的key需要两个条件,一个是hash函数,获得映射到的桶的值,另外一个是equal_to函数,判定两个key是否相等。显然,当每个桶里的元素个数比较平均且比较少的时候,查询性能比较高。

nullptr和NULL

NULL在C++中就是0,这是因为在C++中void* 类型是不允许隐式转换成其他类型的,所以之前C++中用0来代表空指针,但是在重载整形的情况下,会出现上述的问题。所以,C++11加入了nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况,因此,建议以后还是都用nullptr替代NULL吧,而NULL就当做0使用。