HashMap: работа с управляемыми объектами C ++ - PullRequest
0 голосов
/ 30 июля 2010

Я думаю, это глупый вопрос, но вот моя проблема:

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

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

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

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

Ответы [ 3 ]

1 голос
/ 30 июля 2010

Вы должны объявить свою хэш-карту как 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 голосов
/ 19 октября 2012
hash_map <double,gcroot<siteNEVObjectdic^>> d;
d.insert(make_pair<double,gcroot<siteNEVObjectdic^>>(PN2,gcnew siteNEVObjectdic(Lat1,Long1,Lat2,Long2,Lat3,Long3)));

это сработало как шарм.

0 голосов
/ 02 августа 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...