Mfc -> Stl

15.12.2010
15
0
#1
Доброго времени суток!
Сразу скажу что излазил инет, msdn и rsdn...
Собственно прошу помощи... :)
Код в MFC:
// в main.cpp
//...
C++:
...
myClass s1;
//инициализация объекта s1

myClass s2;
//s2 не инициализировался...

mConn.InitHashTable(257);

if (0 == mConn.Lookup(s1.Local, s2))
{
mConn.SetAt(s1.Local, s1);
///....
}
//mConn объявлен как:
C++:
CMap<DWORD, DWORD, myClass, myClass&> mConn;
//myClass объявлен как:
C++:
class myClass
{
public:	
myClass();	
virtual ~myClass();
DWORD GetMessEx (DWORD dwIndex);
DWORD GetMess	(DWORD dwIndex);
DWORD Local;
};
Вопрос главный - как из CMap перетащить в std::map?
И как реализовать в STL сравнение Lookup и вставку SetAt?


Начал было пробовать реализовывать в STL

C++:
std::map<DWORD,myClass> mConn;
if (mConn.find(s1.Local) == 0)
... и тут же остановился ... мне нужно сравнение, делать два асс.контейнера теперь что ли?! :huh: ... вообщем, башка пухнет, подскажите пожалуйста...

Заранее благодарю.
P.S: работаю в MVC++ 6.0 ... если это что-то меняет))
 

a0z

Well-known member
15.03.2011
108
0
#2
if(mConn.find(s1.Local) == mConn.end()) - нет в мапке

про SetAt не понятно. Это ж мапка, элементы не упорядочены. Возможно где-то есть что-то типа ordered_hashtable или как-то так. Надо искать.

остальные вопросы не понятны.
 
15.12.2010
15
0
#3
остальные вопросы не понятны.
Поясню.
1) Lookup() ищет значение по ключу. но значение-то класс! Не понимаю как это реализовать с помощью STL.
2) SetAt() вставляет элемент в мапу. ... тут вроде бы разобрался, но если есть возможность, киньте пару-тройку строк(рабочих), для уверенности.

if(mConn.find(s1.Local) == mConn.end()) - нет в мапке
а это я не понял)) То есть "нет в мапе"?

P.S.: По аналогии не получается сделать, наверное потому что, не умею делать того чего не знаю/недопонимаю...

Добавлено:
Fatal error: Call to a member function register_class() on a non-object in /var/www/codeby/data/www/codeby.net/sources/classes/post/class_post.php on line 2119
вылетает ерорчик, при нажатии "отправить"...
 

a0z

Well-known member
15.03.2011
108
0
#4
1) Lookup() ищет значение по ключу. но значение-то класс! Не понимаю как это реализовать с помощью STL.
2) SetAt() вставляет элемент в мапу. ... тут вроде бы разобрался, но если есть возможность, киньте пару-тройку строк(рабочих), для уверенности.


а это я не понял)) То есть "нет в мапе"?
1 - запамятовал за давностью лет. Кажется нужно у класса-ключа перегрузить operator< и operator== тогда мапка будет знать, порядок элементов и сможет вставить элемент куда надо. Но у вас вроде ж ключом является DWORD? Тогда никаких доп телодвижений не надо.

2 - нет под рукой. Давно уже не писал на C++...

"нет в мапе" - т.е. элемента с запрошенным ключом (ключ - s1.Local) нет в контейнере. Либо я не правильно понял код
if (mConn.find(s1.Local) == 0)
я так думал, тут проверяется, есть ли элемент с ключом s1.Local в mConn
 
15.12.2010
15
0
#5
1 - запамятовал за давностью лет. Кажется нужно у класса-ключа перегрузить operator< и operator== тогда мапка будет знать, порядок элементов и сможет вставить элемент куда надо. Но у вас вроде ж ключом является DWORD? Тогда никаких доп телодвижений не надо.

2 - нет под рукой. Давно уже не писал на C++...

"нет в мапе" - т.е. элемента с запрошенным ключом (ключ - s1.Local) нет в контейнере. Либо я не правильно понял код
if (mConn.find(s1.Local) == 0)
я так думал, тут проверяется, есть ли элемент с ключом s1.Local в mConn
1 - ага, понял теперь, буду пробовать.
... и последнее. да, именно, проверялось наличие s1.Local в mConn. все верно.
Спасибо за оТвет!