Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
1

Контейнер map / свои стрктуры / вствить и достать.

08.12.2011, 14:31. Показов 1686. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. пытаюсь засунуть в контейнер свой тип и не получается ...

Код примернно такой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
typedef struct 
{
int q;
short c;
}man;
 
map<man,int> m;
map<man,int>::_Pairib pib;
map<man,int>::iterator it;
 
typedef pair<man, int> MyPair; 
man M ;
 
M.q=12; M.c=13;
MyPair p(M, 1); m.insert(p);
 
M.q=13; M.c=14;
p.first = M;
p.second = 2;
pib = m.insert(p);
 
cout << "Size of my_map: " << m.size() << '\n';
Может кто знает как вставить и изъять эллементы структруры из контейнера?
Раскажите как или где есть примеры!!! Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2011, 14:31
Ответы с готовыми решениями:

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

Контейнер Map
В общем есть такой код: package test1; import java.util.*; abstract class Pet{ String...

Контейнер map
подскажите пожалуйста, как можно заполнить контейнер map с клавиатуры ?

Контейнер map
Cоздать ассоциативный список имен (ключей), телефонов. Осуществить поиск по именам. Дополнить...

15
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.12.2011, 14:54 2
_SASA_, Нужно определить оператор < для данной структуры. Или использовать функтор сравнения, передаваемый в мапу.
1
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
08.12.2011, 15:23 3
Цитата Сообщение от _SASA_ Посмотреть сообщение
map<man,int> m;
здесь вы сказали,что ключ будет структура.элементы словаря хранятся отсортированными(по ключу),вы должны либо определить функтор или перегрузить операцию меньше в структуре либо поменять местами
C++
1
map<int,man>
1
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
08.12.2011, 16:03  [ТС] 4
А для примера с двумя структурами своими на входе???
Может есть простой пример...
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.12.2011, 16:16 5
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <map>
#include <string>
 
struct Cell
{
   Cell()
   {
   }
   Cell(int r, int c):row(r), column(c)
   {
   }
   int row;
   int column;
};
 
namespace std
{
 
bool operator < (const Cell& first, const Cell& second)
{
   return first.row < second.row || (first.row == second.row && first.column < second.column);
}
 
}
 
struct Value
{
   Value()
   {
   }
   Value(const std::string& v, const std::string& t):value(v), type(t)
   {
   }
   std::string value;
   std::string type;
};
 
void map_test()
{
   const size_t cols = 2;
   const size_t rows = 1;
   std::map<Cell, Value> sheet;
   for (size_t i = 0; i < rows; ++i)
   {
      for (size_t j = 0; j < cols; ++j)
      {
         sheet[Cell(i, j)] = Value("aaaaa", "string");
      }
   }
}
 
int main()
{
    map_test();
}
1
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
09.12.2011, 01:36  [ТС] 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Cell
{
   Cell()
   {
   }
   Cell(int r, int c):row(r), column(c)
   {
   }
   int row;
   int column;
 
string a;
srting b;
 
};
Подскажите а как тут перегрузить оператор?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.12.2011, 11:07 7
_SASA_, Ну. Что значит как? Как у меня перегружен? Вот так же. Смотря по чему надо сравнивать.
0
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
09.12.2011, 13:21  [ТС] 8
простите...
- не перегрузить а искать по двойному стринговому ключу
при помощи итератора
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.12.2011, 13:33 9
_SASA_, Конкретно задачу с чувством, с толком, с расстановкой. Можно даже с выражением.
А то что вы написали - это непонятно что.
1
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
09.12.2011, 15:53  [ТС] 10
По старому вопросу с итератором уже все...
Спасибо большое - все уже сделал и работает!
____________________________________________

Но есть еще вопрос: "Как или каким образом
можно перегружать опретор "<" для ключа
состоящего только из 2-x или из 1-го стринга?".

Спасибо!!!
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.12.2011, 16:08 11
_SASA_, Пф... Выражайтесь яснее уважаемый.

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
32
33
34
35
36
#include <iostream>
#include <map>
#include <string>
#include <algorithm>
 
struct Tst
{
   Tst(const std::string& f, const std::string& s):
      first(f), second(s)
   {
   }
   std::string first;
   std::string second;
};
 
namespace std
{
 
bool operator < (const Tst& first, const Tst& second)
{
   return first.first < second.first && first.second < second.second;
}
 
}
 
int main()
{
   std::map<Tst, int> tstmap;
   tstmap.insert(std::make_pair(Tst("a", "b"), 10));
   tstmap.insert(std::make_pair(Tst("c", "e"), 20));
   tstmap.insert(std::make_pair(Tst("f", "z"), 45));
   std::for_each(tstmap.begin(), tstmap.end(), [](const std::pair<Tst, int>& val) 
   {
      std::cout << val.first.first << ' ' << val.first.second << ' ' << val.second << std::endl;
   });
}
http://liveworkspace.org/code/... 4c9764f9e0
1
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
09.12.2011, 16:33  [ТС] 12
В очередной раз спасибо большое!!!
Вы опять мне очень очень помогли!
0
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
12.12.2011, 17:06  [ТС] 13
Простите, но вопрос еще один и последний:

А как перегрузить оператор "<" с 3 или 5 стрингами?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.12.2011, 17:14 14
_SASA_, Да так же как с одним или двумя.
1
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
12.12.2011, 20:01  [ТС] 15
Простите - не то опять сказал!
Строки будут длинные не из одного символа...
Нужно сравнение длинных стрингов при помощи перегрузки "<"!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct asd
{
...
string a;
string s;
string d;
}
 
bool operator < (const asd& first, const asd& second)
{
 if ((strlen(first.a)<(strlen(secund.a))) // или strncmp
 return first.a < second.a ; //  теоретически нужно всеx сравнить
// а вот сдесь не знаю как... может другие условия есть еще
}
Подскажите пожалуйста общее направление при перегрузке и сравнении!
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.12.2011, 20:53 16
_SASA_, Да сколько угодно...

C++
1
return first.a < second.a && first.b < second.b && first.c < second.c;
0
12.12.2011, 20:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2011, 20:53
Помогаю со студенческими работами здесь

Контейнер map
Почему нельзя писать route? Строки 4,6. bool search(const map&lt;int, set&lt;string&gt;&gt;&amp; route, const...

Контейнер map ?
Не совсем удается разобраться Не удается разобраться с ассоциативными контейнерами ! Как выглядит...

Контейнер map
в программе используется ассоциативный массив, идентификатором которого являются символы проблема...

Контейнер map
Здравствуйте, работаю с контейнером map, анализирую текст, получаю записи типа &quot;слово: число его...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru