Не удалось понять использование map в c

#c

#c

Вопрос:

Map — это класс контейнера, который используется для хранения агрегированных данных… Очень легко восстановить данные, хранящиеся в нем, поскольку он использует алгоритм хэширования для извлечения. map — это пара ключ-значение…Данные могут быть получены с помощью соответствующего ключа… Здесь, в этом объявлении ниже, я определяю, что ключ должен быть целым числом (4 байта), а данные — строковым значением…

 typedef map<INT32U,string>  EventMapType;
  

Я искал пример программы использования map в википедии… Но я не смог понять приведенный там пример..Мне нужно знать, как данные и ключи хранятся на карте и как они восстанавливаются с помощью ключа…Я новичок в MFC…

Комментарии:

1. cplusplus.com/reference/stl/map/map

2. Я не совсем понимаю ваш вопрос. Вас интересует внутреннее представление данных на карте или вас интересует, как работать с map? Если второе, не могли бы вы указать более конкретно на места, которые вы не можете понять в википедии или любом другом примере. Просто вставьте код и укажите на место, которое вы не понимаете. И я думаю, что мы говорим о STL, а не MFC.

3. @Brian Roach: Спасибо за ссылку

4. Np — это действительно хороший справочный сайт для всего std :: stuff.

Ответ №1:

Беата,

Я просто быстро поискал в Google и придумалhttp://erunways.com/c-using-the-standard-template-library-stl-map-example/Я не буду просто копировать и вставлять этот код сюда … это всего лишь около 50 строк.

Я предлагаю вам прочитать этот код, а затем скомпилировать и запустить его (как есть). Если вы столкнетесь с проблемами или просто с чем-то, что не имеет для вас смысла, тогда задавайте конкретные вопросы здесь. K?

Приветствия. Кит.

Ответ №2:

map не использует хэширование. Это невозможно, потому что ограничения не требуют хэшируемых ключей. Обычно это реализовано в виде двоичного дерева поиска, отсортированного по ключу. Таким образом, для этого требуются ключи <-comparable

В отличие от этого, C 0x предоставит unordered_map , который использует хеширование.

Если вам нужна конкретная помощь, вы должны рассказать нам, какой код вы уже пробовали и какие примеры вам непонятны.

Ответ №3:

класс map в STL позволяет хранить данные с помощью ключа любого типа, а не просто с помощью числового ключа, как вы должны обращаться к массиву или вектору. Таким образом, вместо того, чтобы вычислять хэш-функцию и затем обращаться к массиву, вы можете просто позволить классу map сделать это за вас.

 typedef map<INT32U,string>  MyEventMapType;
MyEventMapType EventMapType;
  

Используйте приведенный ниже код в качестве справочного.

Для хранения значений :

 EventMapType[key1] = string1 ;
EventMapType[key2] = string2 ;
EventMapType[key3] = string3 ;
  

Чтобы проверить значение в key1 …

 if(EventMapType.find("key1") == EventMapType.end())
{
    std::cout<<"string1 is not in the map!"<<endl;
}
  

Для получения дополнительной информации ознакомьтесь с документацией

Итераторы также могут использоваться в качестве общего средства доступа к данным, хранящимся на карте; вы можете использовать описанную ранее базовую технику получения итератора:

Комментарии:

1. EventMapType — это тип, вы не можете просто: EventMapType[key1] = string1. сначала объявите переменные…

2. @ soulSurfer2010: Я объявил это как typedef map<INT32U,string> EventMapType; пожалуйста, посмотрите ответ еще раз.

3. #включить «stdafx.h» #включить <iostream> #включить <map> #включить <string> с использованием пространства имен std; int main() { typedef map<int,string> EventTypeMap; EventTypeMap EventType; EventType[1]=»беата»; EventType[2]=»джейн»; EventType[3]=»деклан»; если (EventType.find(1)==EventType.end( )) { cout<<«строки нет на карте!»<<endl; } возвращает 0; } вывод: ничего не отображается. при использовании .find («1») я получаю сообщение об ошибке, что его невозможно преобразовать из const char в const int. при попытке с помощью .find (‘1’) он выдает мне «строки нет в карте». пожалуйста, скажите, что я сделал неправильно в этом коде.