| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Помогите с контейнером multiset |
| Автор: BigLes 12.1.2010, 00:03 |
| мне нужно сделать контейнер на клас а потом его заполнить, но когда я по итертору обращаюсь к следующепу елементу, зависает программма. Помогите пожалуйста. #include <set> using namespace std; class nameio { int opprt; char name[20]; public: int getopprt() { return opprt; }; void setname(char _k[20]) { strcpy(name,_k); }; void setopprt(int _h) { opprt=_h; }; char *getname() { return name; } }; multiset<nameio> im; multiset<nameio>::iterator it; ... void g() { it=im.begin(); } void prodaga(int h,char k[20]) { (*it).setopprt(h); (*it).setname(k); ++it; } вот где-то здесь она и виснет... |
| Автор: Earnest 12.1.2010, 17:11 |
| 1) multiset требует определение оператора < или соответствующего функтора, а я его у тебя не вижу. 2) поскольку ты меняешь все члены данных, каков бы ни был смысл сравнения, оно наверняка становиться неверным. Multiset - это сортированный набор данных. Меняя значения данных, ты разрушаешь сортировку и сам набор, соответсвенно. Я вообще не понимаю, как это у тебя скомпилировалось. По идее, данные в наборе считаются константными (и он предоставляет только константный итератор). Хотя это может зависить от реализации STL. Твоя - явно нехорошая, раз позволяет жто компилировать. |
| Автор: BigLes 12.1.2010, 19:17 |
| Earnest знаю что константный, знал бы ещё это наш препод( ему по-нормальному не подходит, надо делать так... |
| Автор: Earnest 13.1.2010, 08:55 |
| Возможно, ты его неправильно понял? Нельзя менять ключи! |