我正在开发一个抽象数据类型,它类似于赋值的映射STL。该简报说我应该提供一系列设施,包括输出抽象数据类型中包含的对象。我如何输出存储在ADT中的数组数据,我不能使用任何STL,因此我认为我不能使用迭代器,并且在ADT中使用cout的函数看起来很愚蠢。有什么建议?谢谢。代码如下:
template <typename K, typename D>
class Map
{
private:
int mapSize;
int dataFilled;
struct keyData
{
K key;
D data;
};
keyData* datas;
keyData* ptr;
答案 0 :(得分:0)
如果您采用让用户访问对象的方式,那么我将使用迭代器和operator[]
。要定义迭代器,您只需定义begin
和end
成员函数(最终const
重载)。问题是你通常想要提供地图的键和值。 std::map
解决此问题的方法是返回一些在语义上等同于std::pair<const Key, T>
指针的类型,以便您可以通过std::get<0>(*it)
访问密钥,使用std::get<1>(*it)
访问该值。
如果要定义自定义&#34; print&#34;功能,您只需为operator<<
定义std::ostream
:
template<class Key, class Value>
std::ostream& operator<<(std::ostream& os, const Map<Key, Value>&) { ... }
这样您就可以使用:
Map<Key, Value> map;
std::cout << map;
我建议以类似的方式为operator>>
提供std::istream
。
要获得更多灵感,您可以look at the std::map
interface。