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

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

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

непонятно зачем нужный map.value_comp - C++

14.07.2013, 03:36. Просмотров 631. Ответов 8
Метки нет (Все метки)

непонимание здесь в том, что зачем мы пишем
C++
1
std::pair<char,int> highest = {'d',3006}   ;
если все равно всё сравнение идёт по "char" а, не по int. Для этого есть же key_comp которому при сравнении нужен только char
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <map>
typedef std::map<char,int> chint;
int main ()
{ chint mymap;
  mymap['a']=1001;  mymap['b']=2002;  mymap['c']=3003;
  mymap['d']=1101;  mymap['e']=2022;  mymap['f']=4545;
 
  std::cout << "mymap contains:\n";
  chint::iterator it = mymap.begin();
 
  std::pair<char,int> highest = {'d',3006}   ;
 
 std::cout << "mymap contains counting compare:\n";
  while ( mymap.value_comp()(*it, highest) )
    {std::cout << it->first << " => " << it->second << '\n';
    *it++;
    }
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2013, 03:36     непонятно зачем нужный map.value_comp
Посмотрите здесь:

C++ Непонятно
C++ typedef непонятно чего
Непонятно условие C++
C++ выдает ошибку...непонятно
Домашка по C++,непонятно! C++
почему DBL_MIN=0? непонятно C++
C++ wxDev-C++ непонятно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
14.07.2013, 09:39     непонятно зачем нужный map.value_comp #2
Мне кажется это больше для внутреннего использования, во всяком случае не вижу пользы в прямом использовании.
если хочется просто использовать компоратор Map'а для сравнения ключей, то можно использовать key_comp (в оригинале будет возвращать std::less<Key>)
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
14.07.2013, 14:06  [ТС]     непонятно зачем нужный map.value_comp #3
интересно, а есть вообще там какие нибудь функции, чтобы сравнивали по значению int, а не по char
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.07.2013, 14:22     непонятно зачем нужный map.value_comp #4
сравнение двух map
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
14.07.2013, 14:28     непонятно зачем нужный map.value_comp #5
soican, нет
Цитата Сообщение от soican Посмотреть сообщение
интересно, а есть вообще там какие нибудь функции, чтобы сравнивали по значению int, а не по char
нет, потому как это не нужно в map'e.
это можно легко проверить:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <map>
 
class Key {
public:
  bool operator < (const Key&) const {
    return true;
  }
};
 
class Value {
private:
  bool operator < (const Value&) const {
    return true;
  }
};
 
int main () {
  std::map <Key, Value> m;
}
Если в Key поменять public -> private, то будет ошибка компиляции (хотя может быть она будет позже на insert/operator[] - зависит от реализации/нереализации концептов).
Если в Value поставить private - ничего не будет, так как для них нет требования, чтобы Value были бы сравниваемы
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
14.07.2013, 15:11  [ТС]     непонятно зачем нужный map.value_comp #6
Цитата Сообщение от alex_x_x Посмотреть сообщение
Если в Key поменять public -> private, то будет ошибка компиляции (хотя может быть она будет позже на insert/operator[] - зависит от реализации/нереализации концептов).
Если в Value поставить private - ничего не будет, так как для них нет требования, чтобы Value были бы сравниваемы
Из всего этого я делаю вывод, что map изначально создан, для сортировки по алфавиту
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.07.2013, 15:17     непонятно зачем нужный map.value_comp #7
soican, Довольно странный вывод. map - ассоциативный контейнер, в котором поиск происходит по ключу, данные хранятся упорядоченно по ключу.
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
14.07.2013, 15:29  [ТС]     непонятно зачем нужный map.value_comp #8
Цитата Сообщение от ForEveR Посмотреть сообщение
данные хранятся упорядоченно по ключу.
а ключ это же char - как ни заноси элементы, при выводе всё выдаст по алфавиту
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2013, 16:15     непонятно зачем нужный map.value_comp
Еще ссылки по теме:

Объявление функции (непонятно) C++
C++ Зачем нужен std::map
C++ непонятно со строкой
Приведение map<int, B> к map<int, A> C++
C++ Непонятно в С++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.07.2013, 16:15     непонятно зачем нужный map.value_comp #9
soican, Это в данном случае ключ char, а быть он может каким угодно.
Yandex
Объявления
14.07.2013, 16:15     непонятно зачем нужный map.value_comp
Ответ Создать тему
Опции темы

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