2.9学习
1、unorder_map是通过哈希表实现,相对map通过红黑树实现,unorder_map查找的效率更高,但是如果好多键值通过哈希函数得到的都是一个值(极端情况),那查找效率就会降低
unorder_map和unorder_set本质上相同,都是哈希表实现,不过unorder_set中key就是value
2、SGI STL有2个内存分配方式,当用户需要的区块>128时用第一个内存分配方式(直接开辟释放内存),如果<128,就去链表的空隙处查找是否有内存块
3、heap是vector的一种数据管理方法,heap可以把vector中的元素排列成堆(二叉树),封装了特殊的方法进行插入和删除元素,不支持遍历
点击查看代码
vector<int> vec = {3,1,4,1,5,9};
make_heap(vec.begin(), vec.end());
点击查看代码
//将2和7位置的元素拷贝到list中
ostream_iterator<int>ost(cout, " ");
vector<int>vv = { 0,1,2,3,4,5,6,7,8 };
copy(vv.begin(), vv.end(), ost);
cout << endl;
//手动定位到区间的起始迭代器,然后转化为反向迭代器,当然反向迭代器的指向也改变了
//begin指向2,end指向7,转换完rbegin指向6,ren指向1
auto r_begin = vector<int>::reverse_iterator(vv.begin() + 7);
auto r_end = vector<int>::reverse_iterator(vv.begin() + 2);
list<int>ll;
copy(r_begin, r_end, back_inserter(ll));//反向迭代器用back_inserter
copy(ll.begin(), ll.end(), ost);
点击查看代码
ifstream fst("test.txt");
if (!fst)
{
cout << "test打开失败" << endl;
return 1;
}
//将字符串和它所在行绑定
map<string, list<int>>word_line;
string wordsLine;//一行的单词
string word;//读取的单个单词
int number_line = 0;
while (getline(fst, wordsLine))
{
number_line++;
istringstream l_in(wordsLine);
while (l_in >> word)
{
word_line[word].push_back(number_line);
}
}
浙公网安备 33010602011771号