无法理解c ++中map的用法

时间:2011-04-24 08:18:03

标签: c++

Map是一个容器类,用于存储聚合数据......当使用哈希算法进行检索时,很容易检索存储在其中的数据。 map是键值对...可以使用相应的键检索数据... 在下面的这个声明中,我定义了键必须是整数(4个字节),数据作为字符串值...

typedef map<INT32U,string>  EventMapType;

我搜索了在维基百科中使用地图的示例程序...但我无法理解那里给出的示例..我需要知道数据和键如何存储在地图中以及如何通过关键......我是MFC的新手......

3 个答案:

答案 0 :(得分:3)

map不使用散列。它不能,因为约束不需要可用的密钥。它通常实现为二进制搜索树,按键排序。因此,它需要键是&lt; -comparable

相反,C ++ 0x将提供unordered_map,它确实使用散列。

如果您需要特定的帮助,您应该告诉我们您到目前为止尝试过的代码,以及您不理解的示例。

答案 1 :(得分:3)

贝娅塔,

我刚刚做了一个快速的谷歌并提出了http://erunways.com/c-using-the-standard-template-library-stl-map-example/我不会只是复制粘贴代码在这里...它只有大约50行。

我建议您阅读该代码,然后编译并运行它(按原样)。如果您遇到问题或只是对您没有意义的事情,请在此处提出具体问题。 K +

干杯。基思。

答案 2 :(得分:2)

STL的map类允许您通过任何类型的键存储数据,而不是简单地通过数字键存储数据,这是您必须访问数组或向量的方式。因此,不必计算哈希函数然后访问数组,您可以让地图类为您完成。

typedef map<INT32U,string>  MyEventMapType;
MyEventMapType EventMapType;

以下用作参考代码。

存储值

EventMapType[key1] = string1 ;
EventMapType[key2] = string2 ;
EventMapType[key3] = string3 ;

检查key1的值...

if(EventMapType.find("key1") == EventMapType.end())
{
    std::cout<<"string1 is not in the map!"<<endl;
}

如需更多阅读documentation

迭代器也可以用作访问存储在地图中的数据的一般方法;你可以在获得迭代器之前使用基本技术: