Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
LARGER
2 / 2 / 1
Регистрация: 08.01.2018
Сообщений: 135
1

Как перегрузить оператор [] для map<string, int>?

03.06.2018, 03:49. Просмотров 726. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        map<string, int> m;
    map<string, int>::iterator at, begin, end;
 
    string msg;
 
    cout << "Enter the stroke: "; cin >> msg;
 
    for (int i = 0; i < msg.size(); i++)
    {
        m[msg[i]]++;
    }
 
    end = m.end();
    begin = m.begin();
 
    for (at = begin; at != end; at++)
    {
        cout << at->first << "\t" << at->second << endl;
    }}
E0349 отсутствует оператор "[]", соответствующий этим операндам
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2018, 03:49
Ответы с готовыми решениями:

Как вставить элемент и вывести элементы на экран в map<string, map<string,int>> ?
У меня есть map&lt;string, map&lt;string,int&gt;&gt;, в него надо добавить элементы (типа...

Как перегрузить оператор индексации для указателя
#define HIGH_H 0 #define LOW_H 1 #define OPEN_H 2 #define CLOSE_H 3 #define...

Как перегрузить оператор для своего класса?
У меня есть класс, .h class Vertex { public: ~Vertex(); Vertex();...

Как перегрузить оператор [][] для разреженной матрицы?
как перегрузить оператор для разреженной матрицы?знаю, что такого оператора...

Как перегрузить оператор [] для двумерного массива?
Здравствуйте! Есть класс матрица, где в приватном доступе есть Type** matrix....

5
Praktolock
71 / 71 / 18
Регистрация: 29.11.2011
Сообщений: 345
03.06.2018, 04:03 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
clas SOMECLASS: map<string, int>
{
public:
    sometype operator [](int)
    {
        //do somth
    }
};
 
//....
SOMECLASS likeamap;
sometype tt = likeamap[1];
0
Cortas
44 / 43 / 36
Регистрация: 14.03.2016
Сообщений: 200
Завершенные тесты: 5
03.06.2018, 09:34 3
LARGER, зачем тебе тогда map на string int, если ты пихаешь туда символы?
C++
1
m[msg[i]]++;
0
Praktolock
71 / 71 / 18
Регистрация: 29.11.2011
Сообщений: 345
03.06.2018, 10:06 4
Лучший ответ Сообщение было отмечено LARGER как решение

Решение

Цитата Сообщение от Cortas Посмотреть сообщение
ты пихаешь туда
Цитата Сообщение от Cortas Посмотреть сообщение
C++
1
m[msg[i]]++;
А это кстати говоря, вообще не пихание, а непонятно что. Чтобы инкрементировать что-то, сначала туда это что-то нужно положить, а map пуст

Добавлено через 2 минуты
Цитата Сообщение от LARGER Посмотреть сообщение
map<string, int> m;
У тебя тип ключа string, а ты пытаешься использовать оператор [] c сhar, вот он и говорит тебе
Цитата Сообщение от LARGER Посмотреть сообщение
E0349 отсутствует оператор "[]", соответствующий этим операндам
дело говорит тебе компилятор

Добавлено через 6 минут
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
29
30
31
#include <iostream>
#include <string>
#include <map>
using namespace std;
 
int main(int argc, char**argv)
{
    map<char, int> m;
    map<char, int>::iterator at, begin, end;
 
    string msg;
 
    cout << "Enter the stroke: "; cin >> msg;
 
    for (int i = 0; i < msg.size(); i++)
    {
        if(m.find(msg[i])!=m.end())
            m[msg[i]]++;
        else
            m[msg[i]]=1;
    }
 
    end = m.end();
    begin = m.begin();
 
    for (at = begin; at != end; at++)
    {
        cout << at->first << "\t" << at->second << endl;
    }
    return 0;
}
Вот кароч, если я правильно понял, что требуется
Результат:
Enter the stroke: 1333224444aabbbcccA
1 1
2 2
3 3
4 4
A 1
a 2
b 3
c 3
1
Cortas
44 / 43 / 36
Регистрация: 14.03.2016
Сообщений: 200
Завершенные тесты: 5
03.06.2018, 12:26 5
Цитата Сообщение от Praktolock Посмотреть сообщение
А это кстати говоря, вообще не пихание, а непонятно что.
Ну вообще, если map не находит такого элемента, то она автоматически его туда пихает инициализируя 0 (если это, например, int), и возвращает соответственно.
1
LARGER
2 / 2 / 1
Регистрация: 08.01.2018
Сообщений: 135
03.06.2018, 14:43  [ТС] 6
я сделал вот так оно компилится:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    map<char, int> m;
    map<char, int>::iterator at, begin, end;
 
    string msg;
 
    cout << "Enter the stroke: "; getline(cin, msg);
 
    for (int i = 0; i < msg.size(); i++)
    {
        m[msg[i]]++;
    }
 
    end = m.end();
    begin = m.begin();
 
    for (at = begin; at != end; at++)
    {
        cout << at->first << "\t" << at->second << endl;
    }
0
03.06.2018, 14:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2018, 14:43

Как правильно перегрузить оператор для шаблона класса
Имеется такой шаблон: template&lt;int Low = 0, int High = 1000&gt; class Diapazon...

Как перегрузить оператор вывода в поток для вектора?
Стало интересно реализовать подобный функционал, и конечно же ничего не...

Как перегрузить оператор для класса. Хоть убейте, не могу
Нужно поэлементно скопировать строки. Поэлементно, потому что задания другие,...


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

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

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