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

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

Восстановить пароль Регистрация
 
NanoBreaker
 Аватар для NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 82
11.07.2013, 17:52     Существует ли элемент в "сложном" векторе #1
Здравствуйте, недавно столкнулся с такой проблемой
Есть такая структура и последующий вектор:

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++ Существует ряд чисел. Вместо "?" вставить символы
Структура "Информация": - носитель; - объем; - название; - автор. Удалить первый элемент с заданным объемом информации, добавить элемент перед элемент C++
Возможно ли получить "константный" индекс в векторе? C++
C++ Создать список из целых чисел. После каждого элемента, равного "х" вставить элемент, равный "у"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.07.2013, 18:22     Существует ли элемент в "сложном" векторе #2
NanoBreaker, Все ж написано. Или для cell перегружаем оператор < или пишем функтор и передаем его экземпляр четвертым аргументом в функцию.
NanoBreaker
 Аватар для NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 82
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
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
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
 Аватар для NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 82
11.07.2013, 22:57  [ТС]     Существует ли элемент в "сложном" векторе #5
Спасибо за ответы, они помогли разобраться с проблемой.
Yandex
Объявления
11.07.2013, 22:57     Существует ли элемент в "сложном" векторе
Ответ Создать тему
Опции темы

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