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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
_SASA_
128 / 132 / 5
Регистрация: 22.08.2011
Сообщений: 457
08.12.2011, 14:31     Контейнер map / свои стрктуры / вствить и достать. #1
Добрый день. пытаюсь засунуть в контейнер свой тип и не получается ...

Код примернно такой
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';
Может кто знает как вставить и изъять эллементы структруры из контейнера?
Раскажите как или где есть примеры!!! Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2011, 14:31     Контейнер map / свои стрктуры / вствить и достать.
Посмотрите здесь:

C++ Ассоциативный контейнер типа map
контейнер map C++
C++ Контейнер map ?
C++ Контейнер map, с двумя ключами?
C++ Контейнер map
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
08.12.2011, 14:54     Контейнер map / свои стрктуры / вствить и достать. #2
_SASA_, Нужно определить оператор < для данной структуры. Или использовать функтор сравнения, передаваемый в мапу.
lavan
51 / 51 / 1
Регистрация: 21.03.2009
Сообщений: 371
08.12.2011, 15:23     Контейнер map / свои стрктуры / вствить и достать. #3
Цитата Сообщение от _SASA_ Посмотреть сообщение
map<man,int> m;
здесь вы сказали,что ключ будет структура.элементы словаря хранятся отсортированными(по ключу),вы должны либо определить функтор или перегрузить операцию меньше в структуре либо поменять местами
C++
1
map<int,man>
_SASA_
128 / 132 / 5
Регистрация: 22.08.2011
Сообщений: 457
08.12.2011, 16:03  [ТС]     Контейнер map / свои стрктуры / вствить и достать. #4
А для примера с двумя структурами своими на входе???
Может есть простой пример...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
08.12.2011, 16:16     Контейнер map / свои стрктуры / вствить и достать. #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();
}
_SASA_
128 / 132 / 5
Регистрация: 22.08.2011
Сообщений: 457
09.12.2011, 01:36  [ТС]     Контейнер map / свои стрктуры / вствить и достать. #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;
 
};
Подскажите а как тут перегрузить оператор?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.12.2011, 11:07     Контейнер map / свои стрктуры / вствить и достать. #7
_SASA_, Ну. Что значит как? Как у меня перегружен? Вот так же. Смотря по чему надо сравнивать.
_SASA_
128 / 132 / 5
Регистрация: 22.08.2011
Сообщений: 457
09.12.2011, 13:21  [ТС]     Контейнер map / свои стрктуры / вствить и достать. #8
простите...
- не перегрузить а искать по двойному стринговому ключу
при помощи итератора
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.12.2011, 13:33     Контейнер map / свои стрктуры / вствить и достать. #9
_SASA_, Конкретно задачу с чувством, с толком, с расстановкой. Можно даже с выражением.
А то что вы написали - это непонятно что.
_SASA_
128 / 132 / 5
Регистрация: 22.08.2011
Сообщений: 457
09.12.2011, 15:53  [ТС]     Контейнер map / свои стрктуры / вствить и достать. #10
По старому вопросу с итератором уже все...
Спасибо большое - все уже сделал и работает!
____________________________________________

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

Спасибо!!!
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.12.2011, 16:08     Контейнер map / свои стрктуры / вствить и достать. #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/821ef6...bd404c9764f9e0
_SASA_
128 / 132 / 5
Регистрация: 22.08.2011
Сообщений: 457
09.12.2011, 16:33  [ТС]     Контейнер map / свои стрктуры / вствить и достать. #12
В очередной раз спасибо большое!!!
Вы опять мне очень очень помогли!
_SASA_
128 / 132 / 5
Регистрация: 22.08.2011
Сообщений: 457
12.12.2011, 17:06  [ТС]     Контейнер map / свои стрктуры / вствить и достать. #13
Простите, но вопрос еще один и последний:

А как перегрузить оператор "<" с 3 или 5 стрингами?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.12.2011, 17:14     Контейнер map / свои стрктуры / вствить и достать. #14
_SASA_, Да так же как с одним или двумя.
_SASA_
128 / 132 / 5
Регистрация: 22.08.2011
Сообщений: 457
12.12.2011, 20:01  [ТС]     Контейнер map / свои стрктуры / вствить и достать. #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 сравнить
// а вот сдесь не знаю как... может другие условия есть еще
}
Подскажите пожалуйста общее направление при перегрузке и сравнении!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2011, 20:53     Контейнер map / свои стрктуры / вствить и достать.
Еще ссылки по теме:

C++ Контейнер map
Перевернуть контейнер map? C++
Map контейнер сортировка C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.12.2011, 20:53     Контейнер map / свои стрктуры / вствить и достать. #16
_SASA_, Да сколько угодно...

C++
1
return first.a < second.a && first.b < second.b && first.c < second.c;
Yandex
Объявления
12.12.2011, 20:53     Контейнер map / свои стрктуры / вствить и достать.
Ответ Создать тему
Опции темы

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