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

STL set - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
максим)
 Аватар для максим)
2 / 2 / 0
Регистрация: 02.10.2010
Сообщений: 36
03.06.2011, 18:20     STL set #1
вопрос почему в строке while( (*ii)!=elem) говорит что я не перегрузил != не могу понять, и почему в строке cout<<*p<<" "; говорит что я не перегрузил вывод для моего класса ?? Подскажите кто то, оч прошу, я сравниваю пока для простоты по интовой переменной класса, и приходится пользоваться функцией лук, прописанной в классе , с типом инт9если сделать 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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
#include<stack.h>
#include <set.h>
#include <string.h>
 
class My{
  protected:
  char my[20];
  int age;
  public:
  My(){ strcpy(my,"none"); age=0;}
  My(char* mm,int agee){ strcpy(my,mm); age=agee;}
  void look()const{ cout<<"name : "<<my<<"age : "<<age<<endl; }
friend ostream& operator <<(ostream& os, My& m)
      {
        os<<"name : "<<m.my<<" ";
        os<<"age :"<<m.age<<" ";
        return os;
      }
  friend istream& operator >>(istream& os, My& m){
    char x[20];
    int ag;
    os>>x;
    os>>ag;
    m=My(x,ag);
    return os;
  }
 
/*int operator !=(const My obj)
           {int res=0;
            if ((age!=obj.age)&&(my!=obj.my))
             {res=1;
             }
            return res;
           }   */
 int operator<(const My obj)
           {int res=0;
            if (my<obj.my)
             {res=1;
             }
            return res;
           }
 int operator >(const My obj)
           {int res=0;
            if (my>obj.my)
             {res=1;
             }
            return res;
           }
 int operator ==(const My obj)
           {int res=0;
            if (my==obj.my)
             {res=1;
             }
            return res;
           }
         bool operator !=(const My obj)
           {
            if ((age>obj.age)||(age<obj.age))
             return true;
             else
            return false;
           }
 bool operator <(const My& obj)const
           {return obj.my<my;}
 bool operator ()(const My& x, const My& y) const { return x < y; }
};
//**************functions**************//
using namespace std;
void print(set<My > q)
 {
 
  set<My>::iterator p=q.begin();
  while(p!=q.end()){
  cout<<*p<<" ";
  ++p;
 }
}
void search_del(set<My>& t,My elem ,int n){
    set<My> p;
    set<My>::iterator ii=t.begin();
    while( (*ii)!=elem){
      p.insert(*ii);
      t.erase(ii,++ii);
    }
    p.insert(*ii);
    t.erase(ii,++ii);
    for(int j=0 ; j<n; j++)
    t.erase(ii,++ii);
    while(ii!=t.end()){
      p.insert(*ii);
      t.erase(ii,++ii);
    }
    cout<<endl;
    t=p;
   print(t);
}
//****************main**************//
int main(){
set< My> vec;
int len,size;
My tmp;
cout<<" Enter length :"<<endl;
cin>>len;
cout<<endl<<"Enter elements :"<<endl;
for(int i=0; i<len; i++){
  cin>>tmp;
  vec.insert(tmp);
}
print(vec);
 
cout<<endl;
cout<<" Enter how many elems delete :"<<endl;
cin>>len;
set<My>::iterator k=vec.begin();
set<My>::iterator t=vec.begin();
for(int i=0; i<len; i++)
++t;
vec.erase(k,t);
print(vec);
cout<<endl<<" Enter how many elems add :"<<endl;
cin>>len;
cout<<endl<<" Enter elements to add :"<<endl;
for(int i=0; i<len; i++){
  cin>>tmp;
  vec.insert(tmp);
}
print(vec);
cout<<endl<<" enter element to delete after :"<<endl;
cin>>tmp;
cout<<endl<<"enter  how many elements delete :"<<endl;
cin>>size;
cout<<endl;
search_del(vec,tmp ,size);
getch();
return 0;
}
Добавлено через 4 минуты
вот только что до этого писал с другими шаблонами и все замечательно -

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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stack.h>
#include <vector.h>
#include <queue.h>
//*******my_class****************//
class CD {
  protected :
    double my;
    char name[20];
  public:
    CD(){my=0;
      strcpy(name,"none");
    }
    CD(double x,char *tt){my=x; strcpy(name,tt);}
     bool operator <(CD obj)
           {bool res;
            if(my<obj.my)
             {res=true;
             }
            else {res=false;}
            return res;
           }
           friend ostream& operator << (ostream& is, CD& mmy){
            is<<" name :"<<mmy.name;
            is<<" price :"<<mmy.my;
            return is;
           }
           friend istream& operator >>(istream& is, CD& mmy){
           double take;
           char take2[20];
           is>>take;
           is>>take2;
           mmy=CD(take,take2);
           return is;
           }
           int operator !=(const CD obj)
           {int res=0;
            if (my!=obj.my)
             {res=1;
             }
            return res;
           }
};
//*****functions*****************//
void print(queue<CD> q)
 {CD tmp;
  queue<CD> tt;
  while(!q.empty()){
  cout<<q.front()<<endl;
  tmp =q.front();
  q.pop();
  tt.push(tmp);
  }
  q=tt;
 }
void print_stack(stack<CD>& tt)
{
 stack<CD> xx;
    while(!tt.empty())
    {
      cout<<tt.top()<<endl;
      xx.push(tt.top());
      tt.pop();
    }
    tt=xx;
}
void search_del(stack<CD>& t,CD elem ,int n){
    stack<CD> p;
    while( t.top()!=elem){
      p.push(t.top());
      t.pop();
    }
    p.push(t.top());
    t.pop();
 
    for(int j=0 ; j<n; j++)
    t.pop();
    while(!t.empty()){
      p.push(t.top());
      t.pop();
    }
    t=p;
    print_stack(t);
}
//**************main******************//
int main(){
int size,i;
CD tmp;
 stack<CD> stak;
 cout<<" Enter first size of stack :"<<endl;
 cin>>size;
 cout<<endl<<" enter elements of stack :"<<endl;
 for(i=0; i<size; i++){
   cin>>tmp;
   stak.push(tmp);
 }
 print_stack(stak);
 cout<<endl<<" enter how many elements delete :"<<endl;
 cin>>size;
 for(i=0; i<size; i++)
 stak.pop();
 cout<<endl<<"After delete :"<<endl;
 print_stack(stak);
 cout<<endl<<" enter how many elements add :"<<endl;
 cin>>size;
 for(i=0; i<size; i++){
   cin>>tmp;
   stak.push(tmp);
 }
 cout<<endl<<"After add elements :"<<endl;
 print_stack(stak);
 cout<<endl;
 cout<<"Enter element to delete after :"<<endl;
 cin>>tmp;
 cout<<endl<<"Enterhow many elements delete :"<<endl;
 cin>>size;
 cout<<endl<<" after delete "<<size<<" elements, after element :"<<tmp<<endl;
 search_del(stak,tmp ,size);
 queue<CD> que,tt;
 cout<<endl<<" Enter first size of queue :"<<endl;
 cin>>size;
 cout<<endl<<" enter elements of queue :"<<endl;
 for(i=0; i<size; i++){
   cin>>tmp;
   que.push(tmp);
 }
 tt=que;
 print(que);
 cout<<endl;
 while(!tt.empty()){
   stak.push(tt.front());
   tt.pop();
 }
 cout<<" new stack :"<<endl;
 print_stack(stak);
 cout<<endl<<" queue :"<<endl;
 print(que);
 
 getch();
 return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 18:23     STL set #2
в VS 2008 компилируется нормально
максим)
 Аватар для максим)
2 / 2 / 0
Регистрация: 02.10.2010
Сообщений: 36
03.06.2011, 18:26  [ТС]     STL set #3
я на 6 билдере...
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 18:31     STL set #4
Цитата Сообщение от максим) Посмотреть сообщение
int operator !=(const CD obj)
int operator !=(const CD& obj)

Цитата Сообщение от максим) Посмотреть сообщение
friend ostream& operator <<(ostream& os, My& m)
friend ostream& operator <<(ostream& os, const My& m)
максим)
 Аватар для максим)
2 / 2 / 0
Регистрация: 02.10.2010
Сообщений: 36
03.06.2011, 18:44  [ТС]     STL set #5
с перегрузкой ввода уладил, спасибо, а вот с != никак...

Добавлено через 35 секунд
тоесть вывода
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 18:52     STL set #6
борланд глючит xD как вариант могу предложить воспользоваться == он же у тебя работает? правда всё равно не понятно чё он хочет. У меня в VS нормально компильнулось
максим)
 Аватар для максим)
2 / 2 / 0
Регистрация: 02.10.2010
Сообщений: 36
03.06.2011, 19:05  [ТС]     STL set #7
все уже работает, ток не пойму почему(((
там везде надо было соnst ставить после аргументов функций -
C++
1
2
3
4
5
6
7
8
bool operator <(const CD& obj)const
           {bool res;
            if(my<obj.my)
             {res=true;
             }
            else {res=false;}
            return res;
           }
C++
1
2
ool operator >(const CD& obj)const
           {return obj.my>my;}
Добавлено через 5 минут
ну и аналогично с !=

Добавлено через 4 минуты
а можно ли сет отсортировать по убыванию ??? там же стандартно все элементы идут по возрастанию( с чиcлами так, когда я делал set<int> )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2011, 19:57     STL set
Еще ссылки по теме:

STL, контейнер set C++
Используя STL контейнер set заполнить массив C++
C++ Set из STL

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.06.2011, 19:57     STL set #8
максим), Можно. Предикат свой указать. Или же std::greater<T>
Yandex
Объявления
03.06.2011, 19:57     STL set
Ответ Создать тему
Опции темы

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