C++ STL映射输出迭代器查找值

C++ STL映射输出迭代器查找值,c++,templates,stl,iterator,output,C++,Templates,Stl,Iterator,Output,我试图创建一个泛型函数,并将输出迭代器带到任何容器类型(即,一种特定类型的映射,不考虑分配器) 但是,我想知道itOut引用的映射是否已经包含元素,如果已经包含,请更新它 template<typename OutputIterator> static void foo(const std::wstring& rstr, OutputIterator itOut) { // Insert two items into the map that itOut refere

我试图创建一个泛型函数,并将输出迭代器带到任何容器类型(即,一种特定类型的映射,不考虑分配器)

但是,我想知道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;
    }
}
模板
静态void foo(常数std::wstring&rstr、输出迭代器itOut)
{
//将两个项目插入到我输出引用的映射中
itOut++=TokenPair(t,1);
itOut++=TokenPair(t,2);
//这个我不知道怎么办
如果(以某种方式检查地图已包含t)
{
map[t]=5;
}
}
肯定有办法吗


这似乎是最好的方法,因为程序的其他部分正在尝试传递具有相同对但不同分配器的映射。

我采用了Andy Prowl建议的解决方案,其中方法被模板化以采用适当的映射类型。这样,分配器就变得无关紧要了。

我采用了Andy Prowl建议的解决方案,在该解决方案中,方法被模板化以采用适当的映射类型。这样分配器就变得无关紧要了。

为什么不能传递映射并将映射类型作为模板参数?标准迭代器不支持此类运算符。请参阅有关迭代器类型及其支持的操作类型的说明。即使是简单的指针也可以用作迭代器,并且无法访问实际的容器。你必须提供地图作为函数的第三个参数,这是个好问题,好像我忽略了。今天早些时候,我有一个不可能的理由,我放弃了这个想法。我会仔细检查,然后再给你回复。这就是我所担心的,因为我在这些类似的问题中读到了这个:好吧,为什么,出于某种原因,我放弃了这个,我不记得了,但实际上这是个好主意。如果有人想用这句话作为回答,我很乐意给予表扬!为什么不能传递映射并将映射类型作为模板参数?标准迭代器不支持此类运算符。请参阅有关迭代器类型及其支持的操作类型的说明。即使是简单的指针也可以用作迭代器,并且无法访问实际的容器。你必须提供地图作为函数的第三个参数,这是个好问题,好像我忽略了。今天早些时候,我有一个不可能的理由,我放弃了这个想法。我会仔细检查,然后再给你回复。这就是我所担心的,因为我在这些类似的问题中读到了这个:好吧,为什么,出于某种原因,我放弃了这个,我不记得了,但实际上这是个好主意。如果有人想用这句话作为回答,我很乐意给予表扬!