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

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

Восстановить пароль Регистрация
 
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
13.07.2013, 16:07     std::map и перегрузка оператора #1
решил освоить стандартные контейнеры и очередь за "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, std::vector и порядок обхода коллекции C++
allocator std::map C++
C++ std::map не компилируется
std::map нефикс. размер? C++
Стоит ли очищать в деструкторе std::map , std::vecotor? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 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>
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 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;
}
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 и перегрузка оператора
Ответ Создать тему
Опции темы

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