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

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

Войти
Регистрация
Восстановить пароль
 
NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 89
#1

Существует ли элемент в "сложном" векторе - C++

11.07.2013, 17:52. Просмотров 354. Ответов 4
Метки нет (Все метки)

Здравствуйте, недавно столкнулся с такой проблемой
Есть такая структура и последующий вектор:

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
struct cell
{
    char symbol;
    int x;
    int y;
};
 
vector<cell> map_vector;
 
. . .
 
Заполнение вектора 10-ю элементами:
 
string str = "qwertyuiop";
for(int i = 0; i < 10; i++)
{
    cell object = { str[i], i, i*2 };
}
 
. . .
 
cell obj = { '1', 1, 1 };
 
if(binary_search(map_vector.begin(),map_vector.end(),obj)){
    cout << "Exist" << endl;
}else{
    cout << "Doesn't Exist" << endl;
}
В обычном векторе состоящем из int элементов данной проблемы не было бы, но тут при использование binary_search он мне выбивает целый ряд ошибок, и то что он не может определить шаблон под "cell"

Ошибки:

*Error 2 error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'const cell' c:\program files (x86)\vc\include\algorithm 2987

. . .

*Error 10 error C2676: binary '<' : 'const cell' does not define this operator or a conversion to a type acceptable to the predefined operator c:\program files (x86)\vc\include\algorithm 2987

Можете пожалуйста найти выход из этой проблемы, или предоставить другой способ определения существует ли элемент в таком роде вектора.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2013, 17:52     Существует ли элемент в "сложном" векторе
Посмотрите здесь:

Перегрузить "operator -" так, чтобы из вектора удалялся элемент, присутствующий во втором векторе - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; typedef unsigned int...

Как спросить у программы: "Если существует соседний элемент массива по вертикали или горизонтали, то ..." - C++
Как спросить у программы: &quot;Если существует соседний элемент массива по вертикали или горизонтали, то ...&quot; Собственно пробывал так: ...

Возможно ли получить "константный" индекс в векторе? - C++
Здравствуйте, возможно ли получить &quot;константный&quot; индекс в векторе? Я записываю данные в Vector std::vector&lt;int&gt; q; for (size_t...

Определить, существует ли путь от первой ко второй точке, состоящий из "0" - C++
Мне нужно решить задач две задачи: Задача № 1. Дан массив А(m x m), заполненный &quot;1&quot; и &quot;0&quot;. С клавиатуры вводятся координаты i, j двух...

Существует ряд чисел. Вместо "?" вставить символы - C++
Пожалуйста помогите дали задачу по циклам решить не могу. вот условие : существует ряд чисел ((((1?2)?3)?4)?5)?6 который равен 35 ; ...

Для класса "R" не существует конструктор по умолчанию - C++
Подскажите, что не так. И как здесь пользоваться cout? Чтобы вывести с. Просто я вбивал, а он не работает. И где его вообще вбивать нужно? ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
11.07.2013, 18:22     Существует ли элемент в "сложном" векторе #2
NanoBreaker, Все ж написано. Или для cell перегружаем оператор < или пишем функтор и передаем его экземпляр четвертым аргументом в функцию.
NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 89
11.07.2013, 20:55  [ТС]     Существует ли элемент в "сложном" векторе #3
Последние 3 часа потратил на чтение информации о функторах, но так и не разобрался как их применить для этого случая, а перегружать библиотечную функцию я вообще без понятия как.

Можешь пожалуйста помочь и составить код под данную программу, буду очень благодарен, и в будущем уже подобных вопросов не возникнет.

Исходный код:
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
#include <iostream>
#include <conio.h>
#include <vector>
#include <algorithm>
#include <string>
 
using namespace std;
 
struct cell
{
    char symbol;
    int x;
    int y;
    bool operator==(const cell& m) const {
        return ( (m.symbol == symbol) && (m.x == x) && (m.y == y) );
    }
};
 
vector<cell> map_vector;
 
int main()
{
    string str = "qwertyuiop";
    for(int i = 0; i < 10; i++)
    {
        cell object = { str[i], i, i*2 };
    }
 
    cell obj = { 'q', 1, 2 };
 
    if(binary_search(map_vector.begin(),map_vector.end(),obj)){
        cout << "Exist" << endl;
    }else{
        cout << "Doesn't Exist" << endl;
    }
 
    getch();
    return 0;
}
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,363
11.07.2013, 20:59     Существует ли элемент в "сложном" векторе #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct cell
{
    char symbol;
    int x;
    int y;
    bool operator<(const cell& m) const {
        // например, так:
        return symbol < m.symbol;
        // а зависит ли оно от x и y - решать тебе.
        // если надо - добавь в return учет значений x и y
    }
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2013, 22:57     Существует ли элемент в "сложном" векторе
Еще ссылки по теме:

Существует ли "массив" переменных ? - C++
Существует ли &quot;массив&quot; или какая-либо структура для хранения переменных, чтобы была возможность в процессе выполнения программы удалять ...

На C++ в строке после символа - "+" поставить символ "*" и посчитать сколько "+" - C++
С++ Мы вводим вручную строку , (через cin &gt;&gt; )программа должна после каждого &quot;+&quot; поставить &quot;*&quot; потом посчитать сколько всего было &quot;+&quot;...

Не могу "спустить" элемент по столбцу двумерного массива - C++
Здравствуйте Пишу 2д-&quot;игру&quot; (в кавычках потому, что игровой процесс как таковой отсутствует и программа просто обрабатывает массив...

Как правильно записать условие "пока в массиве есть элемент, равный 2"? - C++
условие такое: пока в МАССИВЕ есть число 2, делать: ... ... while (2 in mas) - есть что-то типа этого?


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

Или воспользуйтесь поиском по форуму:
NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 89
11.07.2013, 22:57  [ТС]     Существует ли элемент в "сложном" векторе #5
Спасибо за ответы, они помогли разобраться с проблемой.
Yandex
Объявления
11.07.2013, 22:57     Существует ли элемент в "сложном" векторе
Ответ Создать тему
Опции темы

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