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

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

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

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

11.07.2013, 17:52. Просмотров 351. Ответов 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     Существует ли элемент в "сложном" векторе
Посмотрите здесь:

Как спросить у программы: "Если существует соседний элемент массива по вертикали или горизонтали, то ..." C++
C++ Работа с бинарным деревом: добавить элемент, удалить элемент, вывести в виде "дерева"
Определить, существует ли путь от первой ко второй точке, состоящий из "0" C++
C++ Задача на "особый" элемент матрицы
C++ Существует ряд чисел. Вместо "?" вставить символы
C++ при повторном "обращении" к заранее созданному массиву последний элемент отображается неверно
C++ Существует ли "массив" переменных ?
Создать шаблонный класс "Элемент списка" C++
Возможно ли получить "константный" индекс в векторе? C++
C++ Перегрузить "operator -" так, чтобы из вектора удалялся элемент, присутствующий во втором векторе
C++ Есть числа в файле "student.txt". Нужно считать их в массив и вычислить минимальный элемент массива
Добавить элемент "барьер" в конец массива C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,345
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
    }
};
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