Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
1

Зачем нужен std::map

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

Почитал информацию об этом классе, но так и не понял, зачем он нужен?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2012, 19:27
Ответы с готовыми решениями:

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

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

Зачем нужен std::launder?
Зачем нужен std::launder?

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

11
Каратель
Эксперт С++
6598 / 4019 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
07.11.2012, 19:33 2
Цитата Сообщение от Kgfq Посмотреть сообщение
Почитал информацию об этом классе, но так и не понял, зачем он нужен?
языки изучаем? словариком пользуемся? вот std::map и есть словарь
0
1312 / 974 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
07.11.2012, 19:36 3
Например телефонный справочник это и есть образец map.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
07.11.2012, 19:54  [ТС] 4
То есть, если брать англо-русский словарь, то ключ - это английское слово, а оставшаяся часть (кстати, как она называется?) - русское. Так?
0
1312 / 974 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
07.11.2012, 20:01 5
Цитата Сообщение от Kgfq Посмотреть сообщение
То есть, если брать англо-русский словарь, то ключ - это английское слово, а оставшаяся часть (кстати, как она называется?) - русское. Так?
английское слово ключ, а перевод это значение.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
07.11.2012, 20:11  [ТС] 6
David Sylva, Хм. Но для map нету нормальных методов обработки. Заполнять мап с помощью insert - это же извращение
0
1312 / 974 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
07.11.2012, 20:18 7
Цитата Сообщение от Kgfq Посмотреть сообщение
Заполнять мап с помощью insert - это же извращение
Ты не прав.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
07.11.2012, 20:20  [ТС] 8
David Sylva, в чем конкретно?
0
1312 / 974 / 267
Регистрация: 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
1173 / 886 / 94
Регистрация: 03.08.2011
Сообщений: 2,457
07.11.2012, 20:24 10
Kgfq, в каком смысле нормальные? Сначала почитайте об устройстве этого контейнера и его назначении, Вы понятия не имеете, что говорите.
0
Эксперт С++
5041 / 3102 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
12.11.2012, 13:57 11
Цитата Сообщение от Kgfq Посмотреть сообщение
Но для map нету нормальных методов обработки
Хм... А у std::list, по-вашему, нормальные методы обработки? Что вы вообще подразумеваете под "нормальными методами обработки".
Вообще, там, где отображение реально нужно, я слабо себе представляю заполнение не через insert (ну и ещё один метод заполнения - my_map[key] = value; - в случае, если записи с ключом key не существует, она будет создана, и её значением станет value).
0
526 / 343 / 12
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2012, 14:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

Std::unordered_multimap<std::string, int> map
Приветствую. Как можно получить только &quot;уникальный&quot; ключ в контейнере? ...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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