2013-02-28 2 views
1

Я пытаюсь сделать функцию, которая является общей и принимает выходной итератор для любого типа контейнера (то есть определенный вид карты, независимо от распределителя).STL map output iterator lookup value

Однако, я хотел бы знать, является ли уже содержит карту ссылается 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; 
    } 
} 

Наверняка должен быть способ для этого?

Кажется, это лучший способ, потому что другие части программы пытаются передать карты, имеющие одинаковые пары, но разные распределители.

+2

Почему вы не можете передать карту и указать тип карты в качестве параметра шаблона? –

+2

стандартный итератор не поддерживает такие операторы. См. [Документация] (http://www.cplusplus.com/reference/iterator/) о типах итераторов и о том, какие операции они поддерживают. Даже простой указатель может служить итератором, и нет доступа к фактическому контейнеру. Вы должны были бы предоставить карту в качестве третьего аргумента функции –

+0

Это хороший вопрос, кажется, я пропустил это. Раньше сегодня у меня была причина, почему это было невозможно, и я отбросил эту идею. Я дважды проверю и вернусь к вам. – namezero

ответ

1

Я пошел с решением, предложенным Энди Проулом, где метод шаблонов используется для соответствующего типа карты. Таким образом, распределитель становится неактуальным.