2.11学习
1、STL的hashtable的本质是一个vector的哈希桶,桶的数量一直是质数,当需要扩容的时候就还是质数,每个哈希桶中都储存着一个双向链表,这样,如果有两个不同的元素通过哈希函数得到同一个哈希桶的值,那么这两个元素就储存在双向链表中,这样做是为了防止哈希冲突
如果桶中的链表长度超过了预定的阈值,这个数据结构就会转化为红黑树
2、vector进行扩容时会先把当前内存释放,然后把之前的内容进行迁移到一块更大的内存中,size()是现有元素个数,capicity()是容器的大小,resize()是指定元素的个数,可能会造成元素的构造和销毁,而reserve是会开辟内存,不会构造函数
3、vector的内存释放
点击查看代码
vector<int>vv;
//释放内存
vv.clear();//清空内存
vv.shrink_to_fit();
//直接清空内存并返回一个空vector
vector<int>().swap(vv);
点击查看代码
void print_map(const multimap<string,string>&author_books)
{
for (auto temp : author_books)
{
cout << temp.first << " " << temp.second << endl;
}
}
void remove_books(multimap<string, string>&author_books,const string&name)
{
auto position = author_books.equal_range(name);//返回一个pair<>
if (position.first == position.second)
cout << "没有这个作者" << endl;
else
author_books.erase(position.first, position.second);
}
multimap<string, string>author_books;//作者+书名
author_books.insert(make_pair("A", "高等数学"));
author_books.insert(make_pair("A", "线性代数"));
author_books.insert(make_pair("A", "概率论"));
author_books.insert(make_pair("B", "数据结构"));
author_books.insert(make_pair("B", "计组"));
author_books.insert(make_pair("B", "计网"));
author_books.insert(make_pair("C", "焊接冶金"));
author_books.insert(make_pair("C", "无损检测"));
print_map(author_books);
remove_books(author_books, "B");
print_map(author_books);
浙公网安备 33010602011771号