Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

safe_insert() для map - C++

26.09.2013, 09:43. Просмотров 204. Ответов 4
Метки нет (Все метки)

Привет!!!

Есть задачка: "Напишите усовершенствованный вариант safe_insert() исключительно для ассоциативных контейнеров. Используйте traits для написания safe_insert(), который автоматически выбирает оптимальный вариант для контейнера."
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2013, 09:43     safe_insert() для map
Посмотрите здесь:

Обращение к элементам vector, который находится в map, находящийся в map - C++
Всем добрый день! Имеется такой контейнер. Как обращаться к элементам вектора и как пушбэчить его? map <int,map<int,vector<int> >...

Некорректная работа .find() для map - C++
Доброго времени суток. Столкнулся с такой проблемой. имеется: std::map<int, CCF_sample*> intersect_map; где CCF_sample это...

Составной ключ для std::map - C++
Есть класс. Нужно его сделать ключем для карты. class Vertex{ public: double X,Y,Z; Vertex(double x=0,double y=0, double...

Partition для map. Возможно ли это? - C++
Доброго времени суток, скажите пожалуйста, как применить parttition для map, если это возможно. Нашел информацию для vector-а, с map...

Примеры алгоритмов для STL map - C++
Помогите пожалуйста. Начал делать лабораторную работу. Суть задания: реализовать для map 5 алгоритмов sort, copy, none_of, find_if,...

Структура в качестве ключа для map - C++
Доброго времени суток. Имеется простая структура struct coordinateSet { public: coordinateSet(char *X,int *Y) {

Применение Map для парсинга строк с числами - C++
Всем привет. Подскажите пожалуйста, вот например от куда то поступает данные с набором строк где могут быть числа а так же символы....

Сложение нескольких map (Вывести суммарный список деталей для заданных приборов) - C++
Здравствуйте! По заданию мне нужно вывести суммарный список деталей для заданных приборов. Например, сколько всего ножек нужно и...

Приведение map<int, B> к map<int, A> - C++
class A {}; class B : public A {}; unordered_map&lt;int, shared_ptr&lt;B&gt; &gt; bs; Как привести bs к unordered_map&lt;int, shared_ptr&lt;A&gt;...

map - C++
объясните пожалуйсто как это работает, почему тут &lt;string, int, less&lt;string&gt;&gt; так много перемееных #include &lt;map&gt; #include &lt;string&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
26.09.2013, 12:41     safe_insert() для map #2
привет!
что не получается?
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
26.09.2013, 13:09  [ТС]     safe_insert() для map #3
Цитата Сообщение от _ Посмотреть сообщение
что не получается?
Да вообще не пойму внутрянку как наченить, я просто сделал для галочки
C++
1
2
3
4
5
template<class C,class Iter>
void safe_insert(C& c, Iter begin, Iter end)
{
    c.insert(begin,end);
}
Но это не правильно, нужно как то сделать с использованием <iterator> каких то видимо алгоритмов стл. Ну и конечно использовать полную безопасность - дать сильную гарантию безопасности для исключений, а это значит что при неудаче операции, передаваемая ассоциативная последовательность должна остаться неизмененной. Вообщем думайте господа.
Вообще можно так сделать примерно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<class C,class Iter>
void safe_insert(C& c, Iter begin, Iter end)
{
  C temp(c);//копия объекта
  try
  {
    c.insert(begin,end);
  }
  catch(...)
  {
    //при неудаче возвращаем назад
     с=temp;
  }
}
Но тут видимо мб и будет сильная гарантия хз. но мне кажется тоже сильной не будет, а вдруг конструктор копирования сгенерирует исключение, ну в принципе конструктор копирования с сильной гарантией он не повредит копируемый объект, просто если в блоке
C++
1
2
3
4
5
catch(...)
  {
    //при неудаче возвращаем назад
     с=temp;
  }
конструктор копирования сгенерирует исключение, то 100% потеря данных будет. Вообщем сильную гарантию дать нельзя.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
26.09.2013, 13:40     safe_insert() для map #4
Что такое safe_insert() ?
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
26.09.2013, 13:49  [ТС]     safe_insert() для map #5
castaway, это собственная функция которая которая гарантирует наверно сильную гарантию для операции. Это функция как insert() только с сильной или с базовой гарантией, того что если сгенерирует исключение (неудача операции) не будит утечек ресурса (базовая гарантия) или еще данные останутся в не измененном состоянии(сильная гарантия), данные последовательности переданные в функцию для вставки и сама последовательность в которую добавляются данные.

Просто нужно написать видимо свою insert() только сделать ее с сильной или базовой гарантией. Это нужно если допустим что нить пошло не так и сгенерировалось исключение там допустим при выделении памяти, либо сам конструктор копирования сгенерировал исключение либо operator= то у нас все вернулось на свои места и небыло никаких утечек и никаких изменений в последовательноти, как в передаваемой для копирования, так и той которую нужно изменить.

Добавлено через 4 минуты
Что то вроде этого, я сам еще эту тему не сильно понимаю.
Yandex
Объявления
26.09.2013, 13:49     safe_insert() для map
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru