Хранение любого типа или структуры в std :: map - PullRequest
0 голосов
/ 22 марта 2012

Я пишу тематическую систему публикации / подписки на C ++.Мой общий класс "Event" состоит из трех частей:

  1. Тип события (std :: string)
  2. Идентификатор объекта (без знака int) - это для игрового движка
  3. Данные о событии (std :: map)

Чтобы заполнить карту «Данные события», мне нужно иметь возможность хранить любой тип данных или структуру, например int, string или Vector3 (struct), чтобы привести несколько примеров.Как я могу это сделать?Или, может быть, есть лучший способ сделать это в целом ...

На несвязанной ноте лучше использовать char * или строку для типов событий и имен данных?

1 Ответ

3 голосов
/ 22 марта 2012

Пробовал повышение: любое ?

Для ваших типов событий, почему вы используете строку? std :: maps хранятся отсортированными от нижнего к верхнему значению ключа. Это означает, что внутри вы будете сортировать строки. Постарайтесь сделать это как можно проще для начала. Используйте перечисление, которое должно сделать ваши карты намного быстрее, особенно если учесть, что они станут основой системы уведомлений.

Наконец, вы не хотите использовать char *, потому что карта не будет работать так, как вы ожидаете:

char* key1 = "Hi";
char* key2 = "Hi";
unsigned int id;
std::map< char* ,unsigned int > mymap;
mymap.insert( std::pair<char*,unsigned int>( key1, id ) );
mymap.insert( std::pair<char*,unsigned int>( key2, id ) ); //you've just created a duplicate entry

Причина в том, что key1 и key2 будут иметь разные адреса, даже если они представляют собой одну и ту же строку.

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