C ++ Multimap вставка функции - PullRequest
0 голосов
/ 18 мая 2011

Я использую мультикарту для хранения значений.Я просто хочу при вставке в мультикарту проверить, является ли значение успешным или неудачным.

Я пытаюсь использовать следующий код

if (MultiMap.insert(TypeDefMap::value_type(Id, ans)))
  return 1;
else
  return 0;

Но это дает ошибку, ожидаемую скалярными типами.

Я думаю, что мне здесь не хватает чего-то глупого.Я попытался привести тип к int и bool, но ничего не получилось.

Есть предложения?

Ответы [ 4 ]

2 голосов
/ 18 мая 2011

в соответствии с документацией (по методу multimap insert)

В версиях, возвращающих значение, это итератор, указывающий на недавно вставленный элемент в MultiMap.

Вы должны проверить, означает ли этот итератор! = End () успех, в противном случае - отказ.

1 голос
/ 18 мая 2011

В std::mutlimap::insert возможны только две вещи:

  • Распределение не выполнено, но выдается std::bad_alloc исключение.
  • Компаратор для ключа выдает исключение,но это исключение будет распространено.

(плюс некоторые неопределенные поведения, такие как вызов его для неинициализированного экземпляра / неверного указателя / ..., но это, вероятно, в любом случае вызовет ошибку сегментации).Поскольку ни один из них ничего не возвращает, нет смысла проверять, удалось ли это.

0 голосов
/ 18 мая 2011

Попробуйте использовать

if(MultiMap.insert(TypeDefMap::value_type(Id, ans)) == MultiMap.end())
    return FAILURE
else
    return SUCCESS

Любые возвраты из карты / набора / мультикарты / мультисета, если это итератор, если недействительный, он должен быть равен end ().

0 голосов
/ 18 мая 2011

multimap :: insert возвращает итератор, который указывает на вновь вставленный элемент.

...