Я пытаюсь сделать функцию, которая является общей и принимает выходной итератор для любого типа контейнера (то есть определенный вид карты, независимо от распределителя).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;
}
}
Наверняка должен быть способ для этого?
Кажется, это лучший способ, потому что другие части программы пытаются передать карты, имеющие одинаковые пары, но разные распределители.
Почему вы не можете передать карту и указать тип карты в качестве параметра шаблона? –
стандартный итератор не поддерживает такие операторы. См. [Документация] (http://www.cplusplus.com/reference/iterator/) о типах итераторов и о том, какие операции они поддерживают. Даже простой указатель может служить итератором, и нет доступа к фактическому контейнеру. Вы должны были бы предоставить карту в качестве третьего аргумента функции –
Это хороший вопрос, кажется, я пропустил это. Раньше сегодня у меня была причина, почему это было невозможно, и я отбросил эту идею. Я дважды проверю и вернусь к вам. – namezero