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

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

Восстановить пароль Регистрация
 
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
14.07.2013, 03:36     непонятно зачем нужный map.value_comp #1
непонимание здесь в том, что зачем мы пишем
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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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++
6542 / 3962 / 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Еще ссылки по теме:

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? C++
C++ Как вставить map в map
Приведение map<int, B> к map<int, A> C++

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

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

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