#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’) он выдает мне «строки нет в карте». пожалуйста, скажите, что я сделал неправильно в этом коде.