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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
07.11.2012, 19:27     Зачем нужен std::map #1
Почитал информацию об этом классе, но так и не понял, зачем он нужен?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.11.2012, 19:33     Зачем нужен std::map #2
Цитата Сообщение от Kgfq Посмотреть сообщение
Почитал информацию об этом классе, но так и не понял, зачем он нужен?
языки изучаем? словариком пользуемся? вот std::map и есть словарь
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
07.11.2012, 19:36     Зачем нужен std::map #3
Например телефонный справочник это и есть образец map.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
07.11.2012, 19:54  [ТС]     Зачем нужен std::map #4
То есть, если брать англо-русский словарь, то ключ - это английское слово, а оставшаяся часть (кстати, как она называется?) - русское. Так?
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
07.11.2012, 20:01     Зачем нужен std::map #5
Цитата Сообщение от Kgfq Посмотреть сообщение
То есть, если брать англо-русский словарь, то ключ - это английское слово, а оставшаяся часть (кстати, как она называется?) - русское. Так?
английское слово ключ, а перевод это значение.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
07.11.2012, 20:11  [ТС]     Зачем нужен std::map #6
David Sylva, Хм. Но для map нету нормальных методов обработки. Заполнять мап с помощью insert - это же извращение
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
07.11.2012, 20:18     Зачем нужен std::map #7
Цитата Сообщение от Kgfq Посмотреть сообщение
Заполнять мап с помощью insert - это же извращение
Ты не прав.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
07.11.2012, 20:20  [ТС]     Зачем нужен std::map #8
David Sylva, в чем конкретно?
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
07.11.2012, 20:21     Зачем нужен std::map #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;
}
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
07.11.2012, 20:24     Зачем нужен std::map #10
Kgfq, в каком смысле нормальные? Сначала почитайте об устройстве этого контейнера и его назначении, Вы понятия не имеете, что говорите.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.11.2012, 13:57     Зачем нужен std::map #11
Цитата Сообщение от Kgfq Посмотреть сообщение
Но для map нету нормальных методов обработки
Хм... А у std::list, по-вашему, нормальные методы обработки? Что вы вообще подразумеваете под "нормальными методами обработки".
Вообще, там, где отображение реально нужно, я слабо себе представляю заполнение не через insert (ну и ещё один метод заполнения - my_map[key] = value; - в случае, если записи с ключом key не существует, она будет создана, и её значением станет value).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2012, 14:54     Зачем нужен std::map
Еще ссылки по теме:

Зачем в определении std::forward () нужен объект remove_reference? C++
C++ Std::map и key_comp
Std::map::emplace C++

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

Или воспользуйтесь поиском по форуму:
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
12.11.2012, 14:54     Зачем нужен std::map #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 );
То есть я задаю значение каждого из параметров, а затем вычисляю результат, используя предоставленные значения.
Yandex
Объявления
12.11.2012, 14:54     Зачем нужен std::map
Ответ Создать тему
Опции темы

Текущее время: 09:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru