作为我的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支持此类功能的最佳方法是什么?
答案 0 :(得分:1)
根据std::map<K, V>
或std::pair<K const, V>&
的使用情况,执行与std::pair<K const, V> const&
返回iterator
或const_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;来支持流插入。有了它,您可以使用正确类型的流来构建字符串(提示:标准库中有这样的流)。