Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
#1

Зачем нужен std::map - C++

07.11.2012, 19:27. Просмотров 2569. Ответов 11
Метки нет (Все метки)

Почитал информацию об этом классе, но так и не понял, зачем он нужен?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 19:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зачем нужен std::map (C++):

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? - C++
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Emplace в std::map. Как добавить элемент в std::map без копирования? - C++
здравствуйте... есть ли способ не писать так: std::map<int, char> ksa; ksa.emplace(std::piecewise_construct, ...

Зачем в определении std::forward () нужен объект remove_reference? - C++
Зачем в определении std::forward() нужен объект remove_reference ? И почему не могут быть выведены аргументы шаблона? Я написал вот такой...

Стоит ли очищать в деструкторе std::map , std::vecotor? - C++
У меня ещё один нубский вопрос :) Вот если в классе объявлены мапы и вектора, которые по ходу программы как то заполняются, нужно ли мне...

std::map, std::vector и порядок обхода коллекции - C++
Здравствуйте, уважаемые! Вопрос следующий - если я сохраняю какие-то значения в map или вектор, то всегда ли я буду получать тот-же...

Зачем часто писать std::, если можно один раз using namespace std? - C++
зачем часто писать std:: если можно один раз using namespace std?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.11.2012, 19:33 #2
Цитата Сообщение от Kgfq Посмотреть сообщение
Почитал информацию об этом классе, но так и не понял, зачем он нужен?
языки изучаем? словариком пользуемся? вот std::map и есть словарь
0
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.11.2012, 19:36 #3
Например телефонный справочник это и есть образец map.
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
07.11.2012, 19:54  [ТС] #4
То есть, если брать англо-русский словарь, то ключ - это английское слово, а оставшаяся часть (кстати, как она называется?) - русское. Так?
0
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.11.2012, 20:01 #5
Цитата Сообщение от Kgfq Посмотреть сообщение
То есть, если брать англо-русский словарь, то ключ - это английское слово, а оставшаяся часть (кстати, как она называется?) - русское. Так?
английское слово ключ, а перевод это значение.
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
07.11.2012, 20:11  [ТС] #6
David Sylva, Хм. Но для map нету нормальных методов обработки. Заполнять мап с помощью insert - это же извращение
0
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.11.2012, 20:18 #7
Цитата Сообщение от Kgfq Посмотреть сообщение
Заполнять мап с помощью insert - это же извращение
Ты не прав.
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
07.11.2012, 20:20  [ТС] #8
David Sylva, в чем конкретно?
0
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.11.2012, 20:21 #9
Вот хороший пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <map>
using namespace std;
 
int main ()
{
  map<char,int> mymap;
  map<char,int>::iterator it;
  pair<map<char,int>::iterator,bool> ret;
 
  // first insert function version (single parameter):
  mymap.insert ( pair<char,int>('a',100) );
  mymap.insert ( pair<char,int>('z',200) );
  ret=mymap.insert (pair<char,int>('z',500) ); 
  if (ret.second==false)
  {
    cout << "element 'z' already existed";
    cout << " with a value of " << ret.first->second << endl;
  }
 
  // second insert function version (with hint position):
  it=mymap.begin();
  mymap.insert (it, pair<char,int>('b',300));  // max efficiency inserting
  mymap.insert (it, pair<char,int>('c',400));  // no max efficiency inserting
 
  // third insert function version (range insertion):
  map<char,int> anothermap;
  anothermap.insert(mymap.begin(),mymap.find('c'));
 
  // showing contents:
  cout << "mymap contains:\n";
  for ( it=mymap.begin() ; it != mymap.end(); it++ )
    cout << (*it).first << " => " << (*it).second << endl;
 
  cout << "anothermap contains:\n";
  for ( it=anothermap.begin() ; it != anothermap.end(); it++ )
    cout << (*it).first << " => " << (*it).second << endl;
 
  return 0;
}
1
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
07.11.2012, 20:24 #10
Kgfq, в каком смысле нормальные? Сначала почитайте об устройстве этого контейнера и его назначении, Вы понятия не имеете, что говорите.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.11.2012, 13:57 #11
Цитата Сообщение от Kgfq Посмотреть сообщение
Но для map нету нормальных методов обработки
Хм... А у std::list, по-вашему, нормальные методы обработки? Что вы вообще подразумеваете под "нормальными методами обработки".
Вообще, там, где отображение реально нужно, я слабо себе представляю заполнение не через insert (ну и ещё один метод заполнения - my_map[key] = value; - в случае, если записи с ключом key не существует, она будет создана, и её значением станет value).
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
12.11.2012, 14:54 #12
Удобен для хранения словарей, для использование во всевозможных парсерах, я например использую его для хранения значений аргументов в вычислялке математических выражений, к примеру
C++
1
2
3
4
5
6
7
Tree* expr = Parser::parse( "a + b*sin(c*t)" );
std::map< std::string, double > args;
args[ "a" ] = 1;
args[ "b" ] = 2;
args[ "c" ] = 1;
args[ "t" ] = M_PI_2;
double result = expr->evaluate( args );
То есть я задаю значение каждого из параметров, а затем вычисляю результат, используя предоставленные значения.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2012, 14:54
Привет! Вот еще темы с ответами:

Потокобезопасность std::map::end, std::list::end - C++
Собсна сабж, могу ли я без синхронизаций выполнять подобного рода код if (myIter != map.end()) // != list.end() {...} myIter =...

Размерность std::map - C++
Добрый вечер. Использую тип данных 16 байтовый. Надо записать несколько десятков миллионов расчетов в map &lt;type, type&gt; val; C...

Std::map::emplace - C++
То ли я туплю/криво поставил компилятор, то ли это emplace синтаксис кривой, но... Как использовать emplace применительно к map со...

allocator std::map - C++
Подскажите вопрос, есть тестовое задание: Подскажите где про это почитать и разъясните по-возможности, что это вообще такое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.11.2012, 14:54
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru