Значение поиска итератора вывода карты STL

Я пытаюсь создать функцию, которая является универсальной и принимает итератор вывода для любого типа контейнера (то есть определенного типа карты независимо от распределителя).

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

Неужто для этого должен быть способ?

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


person namezero    schedule 28.02.2013    source источник
comment
Почему вы не можете передать карту и указать тип карты в качестве параметра шаблона?   -  person Andy Prowl    schedule 01.03.2013
comment
стандартный итератор не поддерживает такие операторы. См. документацию о типах итераторов и о том, какие операции они поддерживают. Даже простой указатель может служить итератором, и нет возможности получить доступ к фактическому контейнеру. Вам нужно будет предоставить карту в качестве третьего аргумента функции   -  person Maciek B    schedule 01.03.2013
comment
Хороший вопрос, похоже, я его пропустил. Ранее сегодня у меня была причина, по которой это было невозможно, и я отказался от этой идеи. Я дважды проверю и вернусь к вам.   -  person namezero    schedule 01.03.2013
comment
Это то, о чем я беспокоился, потому что я читал это в этих похожих задачах: stackoverflow.com/questions/3017051/ и stackoverflow.com/questions/11445025/   -  person namezero    schedule 01.03.2013
comment
Хорошо, почему по какой-то причине я отказался от этого раньше, не помню, но на самом деле это отличная идея. Если кто-то хочет сформулировать это как ответ, я буду рад отдать должное!   -  person namezero    schedule 01.03.2013
comment
Вы должны отвечать людям в комментариях, например, с помощью @AndyProwl, иначе никто не узнает, с кем именно вы разговариваете, и человек, о котором идет речь, также не получит уведомление без этого.   -  person Xeo    schedule 01.03.2013
comment
почему не что-то вроде этого: используйте два итератора (возможно, скопируйте его в начале), а затем выполните find_if, где значением является TokenPair, а оператор сравнения сравнивает только ключи   -  person Michael    schedule 01.03.2013


Ответы (1)


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

person namezero    schedule 06.03.2013