【问题标题】:STL map output iterator lookup valueSTL 映射输出迭代器查找值
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多