2010-07-30 2 views
0

Я предполагаю, что это своего рода глупый вопрос, но вот моя проблема:HashMap: Работа с управляемыми объектами C++

Я хочу иметь hash_map<int, Object^> как атрибут моего объекта BigObject, который написан на управляемом C++.

Так что я должен объявить указатель hash_map<int, Object^>* hash, потому что я не могу объявить явно собственный объект в управляемом коде.

Как я могу вставить объект? hash_map[] не будет работать с указателем, и я не могу вставить работу (я не могу использовать std::pair<int, Object^> потому что объект находится под управлением ...

Спасибо большое

ответ

1

Вы должны объявить HashMap, как hash_map<int, gcroot<Object^> >. Вы будете нужно #include <vcclr.h>

Смотрите также msdn

изменения: добавлен пример кода

#include <iostream> 
#include <vcclr.h> 
#include <hash_map> 

using namespace std; 
using namespace stdext; 
using namespace System; 

int main() 
{ 
    hash_map<int, gcroot<Object^> > hash; 

    hash.insert(make_pair<int, gcroot<Object^> >(5, 
       gcnew String("hello world"))); 

    return 0; 
} 
+0

Это работает отлично. спасибо большое – ccote

0

Если вы работаете в .NET, почему бы не использовать одну из коллекций .NET? Они могут использоваться непосредственно в C++/CLI, а также могут использоваться совместно с другими языками .NET, которые std::hash_map не могут. И они прекрасно играют с сборщиком мусора.

.NET предоставляет несколько реализаций хеш-таблиц, включая 'System.Collections.HashTable' и System.Collections.Generic.Dictionary.

В вашем случае будет Dictionary<int, Object^>^.

+0

Я хотел использовать multimap на самом деле. Литература может направлять только один ключ к одному значению справа? – ccote

+0

В этом сценарии я обычно использую 'Dictionary >'. –

0
hash_map <double,gcroot<siteNEVObjectdic^>> d; 
d.insert(make_pair<double,gcroot<siteNEVObjectdic^>>(PN2,gcnew siteNEVObjectdic(Lat1,Long1,Lat2,Long2,Lat3,Long3))); 

это работало как очарование.

Смежные вопросы