Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Возможно, ты его неправильно понял? Нельзя менять ключи! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)