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

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

Войти
Регистрация
Восстановить пароль
 
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
#1

std::map и перегрузка оператора - C++

13.07.2013, 16:07. Просмотров 1126. Ответов 4
Метки нет (Все метки)

решил освоить стандартные контейнеры и очередь за "map"
нахожу на http://en.cppreference.com/w/cpp/container/map замороченный код, сокращаю его, чтоб читалось, работает. Но как? Здесь по-видимому перегрузка << на на что? и как она реализована? с помощью шаблона...это меня застопорило...какие то Compare, Allocator

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
#include <iostream>
#include <map>
 
// A specialization for Key strings
template<typename T, typename Compare, typename Allocator>
std::ostream& operator<<
(std::ostream& stream, const std::map<std::string, T, Compare, Allocator>& map)
 {stream << '{';
  char comma[3] = {'\0',' ', '\0'};
  for (const auto& pair : map)
  {stream << comma << '"' << pair.first << "\":" << pair.second;
   comma[0] = ',';
  }
  stream << '}';
  return stream;
}
 
int main()
{ typedef std::string Key;
  typedef int Mapped;
  // (1) Default constructor
  std::map<Key, Mapped> map;
  map["something"] = 69;
  map["anything"] = 199;
  map["that thing"] = 50;
  std::cout << std::string(80, '-') << std::endl;
  std::cout << "map = " << map << std::endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2013, 16:07     std::map и перегрузка оператора
Посмотрите здесь:

Зачем нужен std::map - C++
Почитал информацию об этом классе, но так и не понял, зачем он нужен?

Чем плох std::map? - C++
std::map ?

Stdext::hash_map и std::map - C++
Здравствуйте форумчане! Может ли кто нибудь объяснить мне отличие stdext::hash_map от std::map? В интернете не так много информации о нем,...

Теоретический вопрос по std::map - C++
Всем привет. Подскажите пожалуйста как std::map резервирует память и как в памяти выглядят его элементы(условно). Те. понятно что вектор -...

Память, используемая std::map - C++
Когда вызывается new, выделение памяти происходит в куче Когда создается экземпляр класса без new или переменная в функции - это память...

std::map в инлайн-асме - C++
Доброго времени суток Имеется MAP-массив содержащий хуки для функций Нужно получить соответствующий адрес в naked функции: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
13.07.2013, 17:18     std::map и перегрузка оператора #2
Цитата Сообщение от soican Посмотреть сообщение
std::ostream& operator<<
(std::ostream& stream, const std::map<std::string, T, Compare, Allocator>& map)
перегрузка оператора вывода в поток, функция принимает ссылку на объект потока std::ostream& stream и саму map - const std::map<std::string, T, Compare, Allocator>& map

если уж изучаешь map должен знать, что данные помещаются по критерию сравнения - Compare, а в памяти располагаются классом Allocator
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
13.07.2013, 18:31  [ТС]     std::map и перегрузка оператора #3
Key,T,Compare,Alloc вот стандартная четверка для map, но объявляем мы его просто
C++
1
std::map<Key, Mapped> map1;
я вот думаю - нафига шаблон для перегрузки?
C++
1
2
template<typename T, typename Compare, typename Allocator>
std::ostream& operator<<
получается только для того, чтобы иметь возможность составить эту функцию, которой нужны эти непонятные параметры,
C++
1
std::map<std::string, T, Compare, Allocator>
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
13.07.2013, 18:52     std::map и перегрузка оператора #4
soican, в принципе их можно и не указывать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <map>
 
 
std::ostream& operator<<(std::ostream& stream, const std::map<std::string, int>& map)
{
    std::map<std::string, int>::const_iterator it = map.begin();
    for(; it != map.end(); ++it)
        stream << (*it).first << " " << (*it).second;
    return stream;
}
 
int main()
{ typedef std::string Key;
    typedef int Mapped;
    // (1) Default constructor
    std::map<Key, Mapped> map;
    map["something"] = 69;
    map["anything"] = 199;
    map["that thing"] = 50;
    std::cout << std::string(80, '-') << std::endl;
    std::cout << "map = " << map << std::endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2013, 19:28     std::map и перегрузка оператора
Еще ссылки по теме:

std::map insert, нужно ли? - C++
ifstream input(&quot;data.txt&quot;); string tmp; while(getline(input,tmp)) { data d = getData(tmp); login++; pass++; } ...

Доступ к элементам в std::map - C++
У меня возник вопрос. В этом участке кода, есть два цикла, которые выводят содержимое контейнера std::map и вывод идентичен. Рационально...

std::map нефикс. размер? - C++
Нубо-вопрос, std::map и std::array имеют фиксированный размер, как и обычные массивы?

Как формируется размер std::map? - C++
ожидал увидеть размер 18. По 5 байт на две строки и по 4 байта на два int-а. Но результат 48. Почему? Как то связано с выравниванием...

Ошибка: map не является членом std:: - C++
Добрый день. Делаю файл-&gt;проект-&gt; создать новый проект -&gt; простой проект на С++. это в qt creator 5.5 код, который не компилит : ...

Составной ключ для std::map - C++
Есть класс. Нужно его сделать ключем для карты. class Vertex{ public: double X,Y,Z; Vertex(double x=0,double y=0, double...


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

Или воспользуйтесь поиском по форуму:
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
13.07.2013, 19:28  [ТС]     std::map и перегрузка оператора #5
а ..получается запудрили мозги только своим правильным оформлением
Yandex
Объявления
13.07.2013, 19:28     std::map и перегрузка оператора
Ответ Создать тему
Опции темы

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