Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > использование find в vector


Автор: fuckingniger 19.6.2011, 15:44
Код

#include <iostream>  //стандартная библиотека
#include <time.h> //случайные числа
#include <stdio.h> //
#include <windows.h> // для HANDLE, курсора, цвета
#include <conio.h>  //для kbhit
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    
    vector<COORD>test;
    COORD new_1,new_2;
    new_1.X=1;
    new_1.Y=1;
    new_2.X=2;
    new_2.Y=2;
    test.push_back(new_1);
    test.push_back(new_2);
    test.push_back(new_2);
    vector<COORD>::iterator u=find(test.begin(),test.end(),new_1);
    
    return 0;
}


ошибки

Код

1>------ Построение начато: проект: test, Конфигурация: Debug Win32 ------
1>Построение начато 19.06.2011 16:49:34.
1>InitializeBuildStatus:
1>  Обращение к "Debug\test.unsuccessfulbuild".
1>ClCompile:
1>  new.cpp
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(41): error C2678: бинарный "==": не найден оператор, принимающий левый операнд типа "_COORD" (или приемлемое преобразование отсутствует)
1>          c:\program files (x86)\microsoft sdks\windows\v7.0a\include\guiddef.h(192): может быть "int operator ==(const GUID &,const GUID &)" [найдено при поиске с зависимостью от аргументов]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\exception(470): или       "bool std::operator ==(const std::_Exception_ptr &,const std::_Exception_ptr &)"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\exception(475): или       "bool std::operator ==(std::_Null_type,const std::_Exception_ptr &)"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\exception(481): или       "bool std::operator ==(const std::_Exception_ptr &,std::_Null_type)"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\system_error(408): или       "bool std::operator ==(const std::error_code &,const std::error_condition &)"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\system_error(416): или       "bool std::operator ==(const std::error_condition &,const std::error_code &)"
1>          при попытке сопоставить список аргументов "(_COORD, const COORD)"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(74): см. ссылку на создание экземпляров функции шаблон при компиляции "_InIt std::_Find<_COORD*,_Ty>(_InIt,_InIt,const _Ty &)"
1>          with
1>          [
1>              _InIt=_COORD *,
1>              _Ty=COORD
1>          ]
1>          c:\users\redwhite\documents\visual studio 2010\projects\test\new.cpp(22): см. ссылку на создание экземпляров функции шаблон при компиляции "_InIt std::find<std::_Vector_iterator<_Myvec>,COORD>(_InIt,_InIt,const _Ty &)"
1>          with
1>          [
1>              _InIt=std::_Vector_iterator<std::_Vector_val<COORD,std::allocator<COORD>>>,
1>              _Myvec=std::_Vector_val<COORD,std::allocator<COORD>>,
1>              _Ty=COORD
1>          ]
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:01.81
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========



что я не так делаю?

Автор: rudvil 19.6.2011, 15:54
У типа/структуры COORD не определен оператор равенства "==", поэтому и ругается.

Добавлено через 11 минут и 47 секунд
Можно так извратиться
Код
#include <iostream>  //стандартная библиотека
#include <ctime> //случайные числа
#include <cstdio> //
#include <windows.h> // для HANDLE, курсора, цвета
#include <conio.h>  //для kbhit
#include <string>
#include <vector>
#include <algorithm>

struct COORD_ADAPTER {
  COORD_ADAPTER(const COORD& coord): coord_(coord) { }
  COORD coord_;
};

bool operator==(const COORD& coord, const COORD_ADAPTER& coord_a) {
  return coord.X == coord_a.coord_.X && coord.Y == coord_a.coord_.Y;
}

using namespace std;
int main()
{
    
    vector<COORD>test;
    COORD new_1,new_2;
    new_1.X=1;
    new_1.Y=1;
    new_2.X=2;
    new_2.Y=2;
    test.push_back(new_1);
    test.push_back(new_2);
    test.push_back(new_2);
    vector<COORD>::iterator u=find(test.begin(),test.end(), COORD_ADAPTER(new_1));
    
    return 0;
}

Автор: boostcoder 19.6.2011, 16:19
а можно заюзать find_if ;)

Автор: boostcoder 19.6.2011, 16:59
а такой вариант чем не устраивает?
Код

#include <iostream>  //стандартная библиотека
#include <ctime> //случайные числа
#include <cstdio> //
//#include <windows.h> // для HANDLE, курсора, цвета
//#include <conio.h>  //для kbhit
#include <string>
#include <vector>
#include <algorithm>

struct COORD {
   int X;
   int Y;
};

bool operator==(const COORD& l, const COORD& r) {
   return l.X == r.X && l.Y == r.Y;
}

int main() {
   std::vector<COORD>test;
   COORD new_1,new_2;
   new_1.X=1;
   new_1.Y=1;
   new_2.X=2;
   new_2.Y=2;
   test.push_back(new_1);
   test.push_back(new_2);
   test.push_back(new_2);
   std::vector<COORD>::iterator u=std::find(test.begin(),test.end(), new_2);
   std::cout << std::distance(test.begin(), u) << std::endl;
   return 0;
}

http://liveworkspace.org/code/54bb3b5f376b5243598673241a63f836

Автор: fuckingniger 19.6.2011, 17:26
а как find_if использовать?

Автор: boostcoder 19.6.2011, 17:32
fuckingniger, ты доку принципиально не читаешь?
http://cplusplus.com/reference/algorithm/find_if/

Автор: fuckingniger 19.6.2011, 17:47
не люблю английский)
я кстати в том примере не понял кое-что

IsOdd - функция с входными параметрами

а её используют без них в этой строчке
Код

it = find_if (myvector.begin(), myvector.end(), IsOdd);


и что-то ваще не разобрался что тут происходит(

Автор: boostcoder 19.6.2011, 17:50
делайте так, как я показал несколькими постами выше.

Цитата(fuckingniger @  19.6.2011,  17:47 Найти цитируемый пост)
не люблю английский

значит, и он вас.

Автор: fuckingniger 19.6.2011, 18:03
ну у нас это взаимно)))


а там  же find_if не используется!(выше)

Автор: boostcoder 19.6.2011, 18:12
Цитата(fuckingniger @  19.6.2011,  18:03 Найти цитируемый пост)
а там  же find_if не используется!

ну дык smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)