Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
1

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

11.07.2013, 17:52. Просмотров 469. Ответов 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

Можете пожалуйста найти выход из этой проблемы, или предоставить другой способ определения существует ли элемент в таком роде вектора.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.07.2013, 17:52
Ответы с готовыми решениями:

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

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

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

Не существует подходящей функции преобразования из "std::string" в "int"
Я только начинаю изучать язык c++ по книге &quot;Язык программирования С++. Базовый курс 5-е изд...

4
В астрале
Эксперт С++
8028 / 4785 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
11.07.2013, 18:22 2
NanoBreaker, Все ж написано. Или для cell перегружаем оператор < или пишем функтор и передаем его экземпляр четвертым аргументом в функцию.
1
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
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;
}
0
Эксперт С++
2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
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
    }
};
1
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
11.07.2013, 22:57  [ТС] 5
Спасибо за ответы, они помогли разобраться с проблемой.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2013, 22:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сколько существует способов расставить между цифр знаки "+" и "-"
Вот сама задача - {удалено} Не могу сделать норм перебор

Функция isspace и тип string: Не существует подходящей функции преобразования из "std::string" в "int"
Добрый день! Я только начинаю изучать язык c++ по книге &quot;Язык программирования С++. Базовый курс...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов), которые разделяются...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую классы: − воин;...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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