【发布时间】:2013-02-28 21:26:06
【问题描述】:
我正在尝试创建一个通用的函数,并将输出迭代器用于任何容器类型(即,一种特定类型的映射,无论分配器如何)。
但是,我想知道itOut引用的地图是否已经包含一个元素,如果是,更新它
template<typename OutputIterator>
static void foo(const std::wstring& rstr, OutputIterator itOut)
{
// Insert two items into the map that itOut references
itOut++ = TokenPair(t, 1);
itOut++ = TokenPair(t, 2);
// This here I don't know how to do
if(somehow check the map already contains t)
{
map[t] = 5;
}
}
肯定有办法解决这个问题吗?
这似乎是最好的方法,因为程序的其他部分正在尝试传递具有相同对但分配器不同的映射。
【问题讨论】:
-
为什么不能传递地图并将地图类型作为模板参数?
-
标准迭代器不支持此类运算符。请参阅 documentation 了解迭代器的类型以及它们支持的操作类型。即使是简单的指针也可以用作迭代器,并且无法访问实际的容器。您必须提供地图作为函数的第三个参数
-
这是个好问题,好像我忽略了。今天早些时候,我有一个不可能的原因,我放弃了这个想法。我会仔细检查并回复你。
-
这就是我所担心的,因为我在这些类似的问题中读到过这个:stackoverflow.com/questions/3017051/… 和 stackoverflow.com/questions/11445025/…
-
好吧,为什么,出于某种原因,我不记得之前放弃了这个,但实际上这是一个好主意。如果有人希望将此作为答案,我很乐意给予信任!
标签: c++ templates stl iterator output