摘要:这里列几个常见问题,应该对你理解和使用hash_map比较有帮助。4.1 hash_map和map的区别在哪里?构造函数:hash_map需要hash函数、等于函数;map只需要比较函数(小于函数).存储结构:hash_map采用hash表存储,map一般采用红黑树(RB Tree)实现。因此其内存数据结构是不一样的。4.2 什么时候需要用hash_map,什么时候需要用map?总体来说,hash_map 查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级;而map的查找速度是log(n)级。并不一定常数就比log(n) 小,hash还有hash函数的耗时,明白了吧,如果你考虑
阅读全文
摘要:一.问题的引出:容器可以存放对象,可以存放指针,这里要谈的是两者的使用问题。就是什么时候存放对象更好,什么时候存放指针更好?二.问题的分析过程:1.首先说下stl容器的工作方式对于内建类型(int float char等),容器的工作方式是纯粹的位拷贝,这里没有什么需要多说的。对于自定义的对象,容器容纳了对象(比如通过insert或push_back等),但容器中存放的对象不是你给它们的那个对象,因为两个对象在内存中的位置不一样。此外,当你从容器中获取一个对象时,你所得到的对象不是容器里的那个对象。取而代之的是,当你向容器中添加一个对象(比如通过insert或push_back等),进入容器的
阅读全文
摘要:这几天对到底选用哪个容器,用哪种形式的find函数有一些迷惑的地方。工作之后,花些时间对这些常用的东西做一个总结,方便以后翻阅所用。1.通用std::find 函数例子1:// find example
#include <iostream>
#include <algorithm>
#include <vector>
usingnamespacestd; intmain () { intmyints[] = { 10, 20, 30 ,40 }; int* p; // pointer to array element: p = find(myints,my
阅读全文
摘要:一. 种类:标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap。几种标准非STL容器,包括数组、bitset、valarray、stack、queue和priority_queue值得注意的是,数组可以和STL算法配合,因为指针可以当作数组的迭代器使用。二.删除元素如果想删除东西,记住remove算法后,要加上
阅读全文
摘要:struct tagItem
{
int a;
int b;
}
//假如在A类中定义成员:
vector<tagItem> m_vecItem;
vector<tagItem> A::f()
{
return m_vecItem;//tagItem需要定义拷贝构造函数,否则m_vecItem即使在别处push_back了,每一个元素的a,b成员不会拷贝过去而保持初值(0之类的值)
} vector<tagItem>& A::f()
{
return m_vecItem;
}
因为stl容器都是基于拷贝,故不仅是vector,其它容器返回引用或对象都
阅读全文
摘要:1:何为序列式容器,C++标准程序库上面是这样说的:此乃可序(ordered)群集,其中每个元素均有固定的位置—取决于插入时机和地点,和元素的值无关。如果以追加方式对一个群集置入六个元素,它们的排列次序将和置入次序一致。STL提供三个定义好的序列式容器:vector,deque,list;vector的相关操作:vector将其元素置于一个dynamic array// vector assign
#include <iostream>
#include<algorithm>
#include <vector>
using namespace std; in
阅读全文