Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据
处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一
种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。
1. map中的元素其实就是一个pair.
2. map的键一般不能是指针, 比如int*, char*之类的, 会出错.
常用的就用string了,int也行.
3. map是个无序的容器, 而vector之类是有序的. 所谓有序无序是指放入的元素并不是按一定顺序放进去的,
而是乱序, 随机存放的(被映射后近似随机存放).所以遍历的时候有些效率差别.
4. 判断有没有找到该键的内容可以这样:
std::map::const_iterator cIter;
cIter =
stdfile.m_map.find(s);
if (cIter == stdfile.m_map.end()) //
没找到就是指向END了
{
m_vecMoreFile.push_back(s);
}
如果键的内容是指针的话,
应该用NULL指针也可以判断了.
5. 遍历:
std::map::iterator
iter;
for (iter = m_map.begin(); iter != m_map.end();
iter++)
{
std::string s =
iter->second.filename;
}
由于map内容可以相当一个PAIR, 那就简单了,
用iter->second就可以取得值了.
可顺便转个其它的几种用法:
1 头文件
#include
遍历:
#include
#include
int main()
{
mapM;
M[1]=2;
M[2]=3;
map::iterator
iter;
for (iter = M.begin(); iter != M.end(); iter++)
{
cout<first<<"
"<second<}
return 0;
}