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

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

Восстановить пароль Регистрация
 
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
02.11.2011, 01:10     Не работают методы в классе с контейнером map #1
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 минут
обнаружил что происходит зацикливание после удаления элемента
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2011, 01:10     Не работают методы в классе с контейнером map
Посмотрите здесь:

C++ Почему не работают методы списка (односвязного), при вызове ф-ий? (Код прилагается)
где лучше реализовывать методы в классе или вне C++
C++ Можно ли в не шаблонном классе создать шаблонные методы?
Движение планет в звёздной системе, методы isOrbitFree и Simulate работают неправильно C++
Написать класс «массив» (В классе реализовать следующие методы: конструкторы (по умолчанию, с параметрами,) C++
Не работают функции в классе C++
C++ работа с контейнером map
Почему работают методы явно не созданного объекта C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
02.11.2011, 01:16     Не работают методы в классе с контейнером map #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);
 
    }
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
02.11.2011, 01:34  [ТС]     Не работают методы в классе с контейнером map #3
Цитата Сообщение от OstapBender Посмотреть сообщение
C++
1
2
3
        c=a->GetContB();
 
        for(iter2=c.begin();iter2!=c.end();iter2++)
все равно после After deleting ничего не выводит
Yandex
Объявления
02.11.2011, 01:34     Не работают методы в классе с контейнером map
Ответ Создать тему
Опции темы

Текущее время: 17:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru