Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 2 / 3
Регистрация: 06.10.2013
Сообщений: 167
1

Поиск в векторе (структура)

01.07.2014, 18:18. Показов 1450. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Помогите пожалуйста начинающему сишнику))), создать две функции
1. Функция находила бы номер записи, если есть, в векторе такое значение.
2. Копировать часть вектора которое бы соответствовало бы данному критерию
Я, все это реализовал по старинке циклами, а вот использовать все богатство библиотеки с++ и пакета boost не получается.

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
typedef struct sСделки{
    sСделки(){}
    sСделки(string& s0, string& s1 ) : КодБумаги(s0), НомСделки(s1){
    }
    string  КодБумаги;
    string  НомСделки;
    } sСделки;
 
typedef vector<sСделки*> vСделки;
 
.... СуществуетЗапись(string s)
{
         НомСделки==s;
    return  .....
}
 
vСделки* КопияВектора(string s)
{
 
}   return ....
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    _vСделки.push_back(new sСделки(string("RIM4"), string("0001")));
    _vСделки.push_back(new sСделки(string("SiM4"), string("0002")));
    _vСделки.push_back(new sСделки(string("RIM4"), string("0003")));
    _vСделки.push_back(new sСделки(string("RIM4"), string("0022")));
    _vСделки.push_back(new sСделки(string("SiM4"), string("0004")));
    _vСделки.push_back(new sСделки(string("RIM4"), string("0021")));
    _vСделки.push_back(new sСделки(string("SiM4"), string("0032")));
 
.....    СуществуетЗапись("0022"); - Существует iterator на запись в векторе
.....    СуществуетЗапись("0023"); - Не существует  как я понимаю iterator на END 
 
vСделки* v1= КопияВектора("RIM4");
 
return 0;
}
С уважением, Александр.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2014, 18:18
Ответы с готовыми решениями:

змейка sdl2.0 , структура в векторе
#include &lt;SDL.h&gt; #include &lt;SDL_image.h&gt; #include &lt;cstdio&gt; #include &lt;iostream&gt; #include...

Как удалить в векторе элемент, который есть структура?
vector&lt;Admin&gt; admins; for (int i = 0; i &lt; admins.size(); i++) { Admin admin = admins; if...

Как получить доступ к элементу через std::max_element, если в векторе структура ?
Как мне найти максимальное значение &quot;a&quot; структуры в векторе ? Могу сделать это простым способом...

Поиск в векторе
Есть вектор v Нужно задать поиск значения 6 и присвоить переменной i номер элемента вектора v, в...

2
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
01.07.2014, 18:44 2
Я думаю вам просто нужен более новый компилятор.
1
2 / 2 / 3
Регистрация: 06.10.2013
Сообщений: 167
01.07.2014, 21:28  [ТС] 3
Спасибо за ответ))))
Но я Вас не понял (((

Добавлено через 2 часа 42 минуты
Большое спасибо Crast.
Crast - прислал решение моей проблемы. Считаю, что решение красивое и написано профессионально.
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
 
struct s
{
    std::string one;
    std::string two;
    int         int_;
    
    s(std::string o, std::string t, int i)
    : one(o),two(t),int_(i)
    {}
    s(){}
 
};
 
std::ostream& operator << (std::ostream& os, s const& val)
{
    os << val.one << " " << val.two << " " << val.int_;
    return os;
}
 
/*Макрос для генерации функций*/
#define COPY_FUNC(FIELD_NAME)                                       \
template<typename T, typename Val = std::string>                    \
std::vector<T> copy_func_ ## FIELD_NAME(std::vector<T> const&  vec, \
                                        Val const& val)             \
{                                                                   \
    std::vector<T> res;                                             \
    for (auto const& a : vec)                                       \
    {                                                               \
        if ( a.FIELD_NAME == val)                                   \
            res.push_back(a);                                       \
    }                                                               \
    return res;                                                     \
}
 
/*Здесь генерируются функции с именами copy_func_one и copy_func_two соответсвенно
 Поле в имени функции. Вторым параметром идет ее значение или объект-значение*/
COPY_FUNC(one)
COPY_FUNC(two)
 
 
int main()
{
    std::vector<s> vec = 
            { 
              s("smoke","lock",10), 
              s("smoke","lose",5),
              s("s","by_value",11),
              s("s3","by_value",12)
            };
    
 
    std::string bval = "by_value";
    std::vector<s> by_value = std::move(copy_func_two(vec,bval));
    std::vector<s> on_char = std::move(copy_func_one(vec, "smoke"));
    
    std::cout << "by_value :\n";
    for (auto& a : by_value)
        std::cout << a << "\n";
    
    std::cout << "char :\n";
    for (auto& a : on_char)
        std::cout << a << "\n";
    
}
0
01.07.2014, 21:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2014, 21:28
Помогаю со студенческими работами здесь

Поиск в векторе
List&lt;Rest&gt; listrest = new List&lt;Rest&gt;(5); Log logs = new Log; Rest fff =...

Поиск в векторе
Есть вектор v: v = 0; v = 1; v = 2; v = 4; v = 6; Как с помощью алгоритма find узнать...

Поиск элемента в векторе.
Сформировать программу в mathcad: Если в заданном целочисленном векторе A(N) есть элементы со...

Поиск и замена в векторе
Есть вектор v, который содержит следующие значения элементов: v Нужно найти и заменить значения...


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

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