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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
максим)
2 / 2 / 0
Регистрация: 02.10.2010
Сообщений: 36
#1

STL set - C++

03.06.2011, 18:20. Просмотров 1324. Ответов 7
Метки нет (Все метки)

вопрос почему в строке 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2011, 18:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос STL set (C++):

Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция - C++
Есть код №1. Он выводить на экран позицию нужного мне слова (только если в середине 1 слово а не 2 и больше например только &quot;privet&quot;. А...

Set из STL - C++
Доброго времени суток, ребята. Прошу помощи со словарём. Вот само задание: Написать программу «Англо - русский и русско - английский...

STL, контейнер set - C++
Помогите, пожалуйста. Задание состоит вот в чем: даны названия городов, и для них перечислены города, в которые можно попасть без...

STL set of sets of strings - C++
Вот такая колбаса(I use VS10): std::set&lt;std::set&lt;std::string&gt;&gt; s; Возможно ли добавить во внутренний std::set&lt;std::string&gt;...

STL контейнер set, вставка элементов - C++
Уважаемые админы.Снова прошу о помощи. Необходимо в множество bred,начиная с позиции n, вставить элементы из множества new_bred. ...

Используя STL контейнер set заполнить массив - C++
Задание 2. Данную задачу решить не используя метод sort, а используя STL контейнер: set. Заполнить массив размером 10 случайными числами от...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 18:23 #2
в VS 2008 компилируется нормально
0
максим)
2 / 2 / 0
Регистрация: 02.10.2010
Сообщений: 36
03.06.2011, 18:26  [ТС] #3
я на 6 билдере...
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 18:31 #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)
1
максим)
2 / 2 / 0
Регистрация: 02.10.2010
Сообщений: 36
03.06.2011, 18:44  [ТС] #5
с перегрузкой ввода уладил, спасибо, а вот с != никак...

Добавлено через 35 секунд
тоесть вывода
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 18:52 #6
борланд глючит xD как вариант могу предложить воспользоваться == он же у тебя работает? правда всё равно не понятно чё он хочет. У меня в VS нормально компильнулось
0
максим)
2 / 2 / 0
Регистрация: 02.10.2010
Сообщений: 36
03.06.2011, 19:05  [ТС] #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> )
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
03.06.2011, 19:57 #8
максим), Можно. Предикат свой указать. Или же std::greater<T>
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2011, 19:57
Привет! Вот еще темы с ответами:

Как получить доступ к объектам set-множества? (STL) - C++
Помогите, пожалуйста: запихал в контейнер set объекты класса, а как потом получить доступ к определенному полю объекта в контейнере - не...

STL std::set, std::pair, std::make_pair - C++
Я не знаю как описать тему в двух словах, поэтому не обращайте внимание на название темы. Собственно перейдем к нашим баранам: есть...

поменять в настройке Character Set на Use Multy-Byte Character Set - C++
При компиляции не видет файла .exe на форуме прочитал , что нужно поменять в настройке Character Set на Use Multy-Byte Character Set ...

STL - C++
Данная программа делает следующее 1. Создать объект-контейнер в соответствии с вариантом задания и заполнить его данными, тип которых...


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

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

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