С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

14.07.2013, 03:36. Просмотров 770. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2013, 03:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос непонятно зачем нужный map.value_comp (C++):

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

Обращение к элементам vector, который находится в map, находящийся в map - C++
Всем добрый день! Имеется такой контейнер. Как обращаться к элементам вектора и как пушбэчить его? map &lt;int,map&lt;int,vector&lt;int&gt; &gt;...

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? - C++
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Как вставить элемент и вывести элементы на экран в map<string, map<string,int>> ? - C++
У меня есть map&lt;string, map&lt;string,int&gt;&gt;, в него надо добавить элементы (типа Ivanov potato 200) Использовать именно map&lt;string,...

Как вставить map в map - C++
есть такой map map &lt; INT64 , map &lt;INT64 , map&lt; wArray , int &gt; &gt; &gt; tMenu; как его заполнить? пробовал так ...

Emplace в std::map. Как добавить элемент в std::map без копирования? - C++
здравствуйте... есть ли способ не писать так: std::map&lt;int, char&gt; ksa; ksa.emplace(std::piecewise_construct, ...

8
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
14.07.2013, 09:39 #2
Мне кажется это больше для внутреннего использования, во всяком случае не вижу пользы в прямом использовании.
если хочется просто использовать компоратор Map'а для сравнения ключей, то можно использовать key_comp (в оригинале будет возвращать std::less<Key>)
0
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
14.07.2013, 14:06  [ТС] #3
интересно, а есть вообще там какие нибудь функции, чтобы сравнивали по значению int, а не по char
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.07.2013, 14:22 #4
сравнение двух map
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
14.07.2013, 14:28 #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 были бы сравниваемы
0
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
14.07.2013, 15:11  [ТС] #6
Цитата Сообщение от alex_x_x Посмотреть сообщение
Если в Key поменять public -> private, то будет ошибка компиляции (хотя может быть она будет позже на insert/operator[] - зависит от реализации/нереализации концептов).
Если в Value поставить private - ничего не будет, так как для них нет требования, чтобы Value были бы сравниваемы
Из всего этого я делаю вывод, что map изначально создан, для сортировки по алфавиту
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
14.07.2013, 15:17 #7
soican, Довольно странный вывод. map - ассоциативный контейнер, в котором поиск происходит по ключу, данные хранятся упорядоченно по ключу.
0
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
14.07.2013, 15:29  [ТС] #8
Цитата Сообщение от ForEveR Посмотреть сообщение
данные хранятся упорядоченно по ключу.
а ключ это же char - как ни заноси элементы, при выводе всё выдаст по алфавиту
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
14.07.2013, 16:15 #9
soican, Это в данном случае ключ char, а быть он может каким угодно.
0
14.07.2013, 16:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2013, 16:15
Привет! Вот еще темы с ответами:

сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь усложнять? - C++
сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь...

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? - C++
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

Приведение map<int, B> к map<int, A> - C++
class A {}; class B : public A {}; unordered_map&lt;int, shared_ptr&lt;B&gt; &gt; bs; Как привести bs к unordered_map&lt;int, shared_ptr&lt;A&gt;...

Непонятно в С++ - C++
Для книг, хранящихся в библиотеке, задаются: регистрационный номер книги, автор, название, год издания, издательство, количество страниц....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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