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

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

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

safe_insert() для map - C++

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

Привет!!!

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

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

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? - C++
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Как вставить элемент и вывести элементы на экран в map<string, map<string,int>> ? - C++
У меня есть map&lt;string, map&lt;string,int&gt;&gt;, в него надо добавить элементы (типа Ivanov potato 200) Использовать именно map&lt;string,...

Как вставить map в map - C++
есть такой map map &lt; INT64 , map &lt;INT64 , map&lt; wArray , int &gt; &gt; &gt; tMenu; как его заполнить? пробовал так ...

Emplace в std::map. Как добавить элемент в std::map без копирования? - C++
здравствуйте... есть ли способ не писать так: std::map&lt;int, char&gt; ksa; ksa.emplace(std::piecewise_construct, ...

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

4
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
26.09.2013, 12:41 #2
привет!
что не получается?
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
26.09.2013, 13:09  [ТС] #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% потеря данных будет. Вообщем сильную гарантию дать нельзя.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
26.09.2013, 13:40 #4
Что такое safe_insert() ?
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
26.09.2013, 13:49  [ТС] #5
castaway, это собственная функция которая которая гарантирует наверно сильную гарантию для операции. Это функция как insert() только с сильной или с базовой гарантией, того что если сгенерирует исключение (неудача операции) не будит утечек ресурса (базовая гарантия) или еще данные останутся в не измененном состоянии(сильная гарантия), данные последовательности переданные в функцию для вставки и сама последовательность в которую добавляются данные.

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

Добавлено через 4 минуты
Что то вроде этого, я сам еще эту тему не сильно понимаю.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2013, 13:49
Привет! Вот еще темы с ответами:

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

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

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

Функция считывания из файла для map - C++
в файле задана последовательность ключ-точка(map&lt;string,MYPOINT&gt;). Помогите, пожалуйста, написать функцию считывания из файла, а то везде...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
26.09.2013, 13:49
Ответ Создать тему
Опции темы

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