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

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

Войти
Регистрация
Восстановить пароль
 
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
#1

Не работают методы в классе с контейнером map - C++

02.11.2011, 01:10. Просмотров 947. Ответов 2
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <map>
#include <iostream>
#include <string>
 
class Superclass
{
    map<long,long> a;
    map<long,long> b;//ñîçäГ*Г*ГЁГҐ îáúåêòГ* ГЄГ®Г*ГІГҐГ©Г*ГҐГ°Г* Гў ñîîòâåñòâèè Г± ГўГ*ðèГ*Г*òîì
    map<long,long>::iterator it1;
    map<long,long>::iterator it2;
    pair<map<long,long>::iterator,bool> ret1;
    pair<map<long,long>::iterator,bool> ret2;
public:
    Superclass(){};
    bool AddToA(long c,long d)
    {
       ret1=a.insert(pair<long,long>(c,d));
       return ret1.second;
    }
    bool AddToB(long c,long d)
    {
       ret2=b.insert(pair<long,long>(c,d));
       return ret2.second;
    }
 
    map<long,long> GetContA()
    {
       return a;
    }
    map<long,long> GetContB()
    {
       return b;
    }
    string EraserA(long key)
    {
       a.erase(key);
       return "Element deleted";
    }
    string EraserB(long key)//ГіГ¤Г*ëåГ*ГЁГҐ ýëåìåГ*ГІГ* ГЇГ® êëþ÷Г*
    {
       b.erase(key);
       return "Elem deleted";
    }
    void BiggerEraserA(long key)
    {
       it1=a.find(key);
       a.erase(it1,a.end());
    }
    void BiggerEraserB(long key) //ГіГ¤Г*ëåГ*ГЁГҐ ГўГ±ГҐГµ ýëåìåГ*òîâ ïîñëå êëþ÷Г* Гў B
    {
       it2=b.find(key);
       b.erase(it2,b.end());
    }
    void BEditot(long key,long val)//èçìåГ*ГҐГ*ГЁГҐ ýëåìåГ*ГІГ* Гў B
    {
       b[key]=val;
    }
    void AEditor(long key,long val)
    {
       a[key]=val;
    }
    void EraseAdd(long key) //ГіГ¤Г*ëåГ*ГЁГҐ ГЇГ® Г§Г*Г¤Г*Г*Г*îìó êëþ÷ó ýëåìåГ*ГІГ* ГЁГµ ГЂ ГЁ êîïèðîâГ*Г*ГЁГҐ ГІГіГ¤Г* ГўГ±ГҐ ýëåìåГ*òîâ ГЁГ§ B
    {
       it1=a.find(key);
       a.erase(it1,a.end());
       it2=b.begin();
       a.insert(a.find(key),b.end());
    }
 
 
};
 
int main()
{
    Superclass *a=new Superclass();
    bool x=a->AddToA(3,4);
    a->AddToA(5,6);
    a->AddToA(4,6);
    a->AddToA(7,8);
    a->EraserA(5);
    bool y=a->AddToB(3,4);
    a->AddToB(7,8);
    a->AddToB(8,9);
    a->AddToB(10,11);
    a->AddToA(10,5);
    map<long,long> c=a->GetContA();
    map<long,long> c1=a->GetContB();
    map<long,long>::iterator iter1;
    map<long,long>::iterator iter2;
    cout<<"A map"<<endl;
    for(iter1=c.begin();iter1!=c.end();iter1++)
    cout<<(*iter1).first<<"=>"<<(*iter1).second<<endl;
    cout<<"B map"<<endl;
    for(iter2=c1.begin();iter2!=c1.end();iter2++)
    cout<<(*iter2).first<<"=>"<<(*iter2).second<<endl;
    cout<<"Erase 7 from B"<<endl;
    cout<<a->EraserB(7)<<endl;
    for(iter2=a->GetContB().begin();iter2!=a->GetContB().end();iter2++)
    cout<<(*iter2).first<<"=>"<<(*iter2).second<<endl;
    a->BEditot(8,1000);
    a->AddToB(4,6);
    cout<<"After editing"<<endl;
    for(iter1=a->GetContB().begin();iter1!=a->GetContB().end();iter1++)
    cout<<(*iter1).first<<"=>"<<(*iter1).second<<endl;
    cout<<"Erase after"<<endl;
    a->BiggerEraserB(3);
    cout<<"After deleting"<<endl;
    for(iter1=a->GetContB().begin();iter1!=a->GetContB().end();iter1++)
    cout<<(*iter1).first<<"=>"<<(*iter1).second<<endl;
    cout<<"Erase add"<<endl;
    a->EraseAdd(4);
//  map<long,long> k=a->GetContA();
    for(iter1=a->GetContA().begin();iter1!=a->GetContA().end();iter1++)
    cout<<(*iter1).first<<"=>"<<(*iter1).second<<endl;
    return 0;
}
по одному элементу удаляет и изменяет.
но не работает метод который удаляет все элементы после заданного(BiggerEraseB в данном случае). А также метод в котором удаляются все элементы после заданного из контейнера а и затем в контейнер a добавляются все элементы из контейнера b. Выводит ничего.

Как удалить n элементов после заданного из контейнера?циклом или есть какой-то встроенный метод в классе map?

Добавлено через 45 минут
обнаружил что происходит зацикливание после удаления элемента
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2011, 01:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работают методы в классе с контейнером map (C++):

Неправильно работают методы в классе - C++
Есть класс GameObject в котором есть виртуальный метод draw: class GameObject { public: float xpos = 0; float ypos = 0; int...

работа с контейнером map - C++
Есть программа, она с файла забирает значения. В файле набор цифр 1 2 45 2 3 60 1 2 60 Вывод я сделал, а вот вторая часть ставит в...

Ошибка с map контейнером - C++
Всем привет , может кто подсказать, что я делаю не правильно ? Вылезает ошибка , чтобы я ни делал . Пытаюсь рекурсивно переходить на...

Работа с контейнером map, запрос на выборку - C++
Здравствуйте дамы и господа. Возник вопрос std::map&lt;std::pair&lt;int, int&gt;, Cell&gt; myVek; myVek = Cell(20, 20, false, false); Не...

Не работают функции в классе - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &quot;nasled.h&quot; using namespace std; int main() { setlocale(LC_ALL,...

Можно ли в не шаблонном классе создать шаблонные методы? - C++
Можно ли в не шаблонном классе создать шаблонные методы? Пример: Есть перегруженная функция например: void test(int x),test(float...

2
OstapBender
583 / 522 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
02.11.2011, 01:16 #2
---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!

Program: c:\Documents and Settings\deg\Desktop\tests4\Debug\tests4.exe
File: d:\studio2008\vc\include\xtree
Line: 304

Expression: map/set iterators incompatible

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)
---------------------------
Abort Retry Ignore
---------------------------
лол.

кароче все
C++
1
        for(iter2=a->GetContB().begin();iter2!=a->GetContB().end();iter2++)
надо заменить на
C++
1
2
3
        c=a->GetContB();
 
        for(iter2=c.begin();iter2!=c.end();iter2++)
и нормальный метод:
C++
1
2
3
4
5
6
7
8
    void EraseAdd(long key) //удаление по заданному ключу элемента их А и копирование туда все элементов из B
    {
           a.erase(key);
 
           for (std::map<long,long>::iterator it = b.begin(); it!=b.end(); it++)
               a.insert(*it);
 
    }
1
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
02.11.2011, 01:34  [ТС] #3
Цитата Сообщение от OstapBender Посмотреть сообщение
C++
1
2
3
        c=a->GetContB();
 
        for(iter2=c.begin();iter2!=c.end();iter2++)
все равно после After deleting ничего не выводит
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2011, 01:34
Привет! Вот еще темы с ответами:

где лучше реализовывать методы в классе или вне - C++
читал где-то, что реализация метода в теле класса или вне его не одно и то же. так ли это и в чем разница?

Как работают static-переменные объявленные в в базовом классе? - C++
Информации увидел много, но суть так и не могу уловить. Образовалась пара вопросов: 1. Если я создаю static-переменную в классе и делаю...

Почему работают методы явно не созданного объекта - C++
Привет. Беглый поиск не дал ответа на вопрос, почему работает нижеприведённый код: class SomeClass { public: ...

Написать класс «массив» (В классе реализовать следующие методы: конструкторы (по умолчанию, с параметрами,) - C++
помогите пожалуйста! необходимо: 1. Написать класс «массив». 2. В классе реализовать следующие методы: конструкторы (по умолчанию, с...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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