实现通用映射[来自HW]

时间:2014-01-06 04:13:33

标签: c++

作为我的C ++ HW的一部分,我必须实现一个通用的Map容器​​。

我应该实现的地图应该有一个迭代器和一个constant_iterator。 我决定将数据存储在节点中[如链接列表中]。

我提供了map_example.cpp,我的任务是编写map.h,以便map_example可以编译。

我的问题是关于map_example.cpp

中的以下代码行
Map<std::string,int> msi;
msi.insert("Alice",5);
msi.insert("Bob",8);
msi.insert("Charlie",0);

// print map
for(Map<std::string,int>::const_iterator it = msi.begin(); it != msi.end(); ++it) 
{
    std::cout << *it << std::endl;
    /*
    * prints:
    * Alice:5
    * Bob:11
    * Charlie:0
    */
}

从这段代码中,我知道我必须重载“*”运算符,但我不知道要返回什么才能启用此循环来打印地图内容。

我的一个想法是实现以下内容: 1. iterator :: getKey() 2. iterator :: getData() 3.运算符“*”将返回一个字符串,howerve我不知道如何从通用数据创建一个字符串。

实现map tu支持此类功能的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

根据std::map<K, V>std::pair<K const, V>&的使用情况,执行与std::pair<K const, V> const&返回iteratorconst_iterator的内容类似的操作。但是,std::pair<T0, T1>没有输出运算符,而您需要返回的类型应该定义输出迭代器。

答案 1 :(得分:0)

具体问题似乎是如何从具有泛型类型的变量生成字符串。这是一个可能的答案;还有更多。

你曾经使用过流(cin和cout,例如,是流)。你可能已经注意到你可以使用operator&lt;&lt;&lt;&lt;&lt;&lt; (整数,字符串,你有什么)。通过为操作员提供过载&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;为您的特定类型。

您可能要求地图的通用类型必须通过运算符&lt;&lt;来支持流插入。有了它,您可以使用正确类型的流来构建字符串(提示:标准库中有这样的流)。