Предикат и binary_search
От: tanex  
Дата: 22.04.04 07:53
Оценка:
Можно ли использовать в binaty_search предикат с разными типами аргументов???
Имеется:
struct compare_search
{
bool operator() (const CPerson item, const string &name) const
{
return item.GetFirstName < name);
}
};

в программе:

vect<CPerson> vect;
binary_search(vect.begin(), vect.end(), "firstname", compare_search()); //ошибка

короче, так не работает
может быть кто-нибудь знает как это заработает???
Re: Предикат и binary_search
От: Vamp Россия  
Дата: 22.04.04 07:59
Оценка:
А бидер не поможет?
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Предикат и binary_search
От: Vamp Россия  
Дата: 22.04.04 08:16
Оценка:
Ну, в смысле биндер, конечно.

Вот так примерно:

#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

struct compare_my : public binary_function<int, string, bool> {
    bool operator() (int i, string s) const {
    if (s[i]=='a') return true;
    return false;
    }
};
    


int main() {
    vector<string> vec;
    vec.push_back("ba");
    vec.push_back("ab");
    
    string* s=find_if(vec.begin(), vec.end(), bind1st(compare_my(), 1));
    cout << *s << endl;
}
Да здравствует мыло душистое и веревка пушистая.
Re: Предикат и binary_search
От: ArtDenis Россия  
Дата: 22.04.04 08:29
Оценка: 5 (2) +1
Попробуй так:

struct compare_search
{
  bool operator() (const CPerson & item, const string & name) const
  {
    return (item.GetFirstName < name);
  }

  bool operator() (const string & name, const CPerson & item) const
  {
    return (name < item.GetFirstName);
  }
};


---
СНП Артёмов Денис. E-mail: artden(на)ufacom(точка)ru
Posted via RSDN NNTP Server 1.8 beta
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Предикат и binary_search
От: Kvsius  
Дата: 22.04.04 08:41
Оценка: 3 (1)
Ну, блин! Это, что задачка под названием Simple STL Task?
Может вообще опубликовать где нибудь все ВШП-шные задачки...

Вобщем, добрый день коллега!
Я сделал проще:

class FindByLastName
{
public:
bool operator()(CPerson* pFirstPerson, CPerson* pSecondPerson) const
{
return (pFirstPerson->GetLastName() < pSecondPerson->GetLastName());
}
};

и вызывал это так:

CPerson* pPerson = new CPerson("", strLastName.c_str(), 0);

binary_search(VectorCopyPerson.begin(), VectorCopyPerson.end(), pPerson, FindByLastName());

и потом:

delete pPerson;

Хотя у меня это еще не приняли... но оно работает и криминала я здесь не вижу .
Re[2]: Предикат и binary_search
От: Bell Россия  
Дата: 22.04.04 09:00
Оценка:
Здравствуйте, Kvsius, Вы писали:

K>Ну, блин! Это, что задачка под названием Simple STL Task?

K>Может вообще опубликовать где нибудь все ВШП-шные задачки...

Тогда до кучи в раздел Simple STL Task надо добавить такое:

//Как не надо делать
CPerson* pPerson = new CPerson("", strLastName.c_str(), 0); 
...
delete pPerson;

//Как надо делать
std::auto_ptr<CPerson> pPerson(new CPerson("", strLastName.c_str(), 0));
...
Любите книгу — источник знаний (с) М.Горький
Re[2]: Предикат и binary_search
От: tanex  
Дата: 22.04.04 12:39
Оценка:
так и было мной сделано, дошло после

а вот еще у меня после каждого использования accumulate список "персонов" возрастает вдвое,
из-за чего???
Re[3]: Предикат и binary_search
От: Kvsius  
Дата: 23.04.04 13:10
Оценка:
Здравствуйте, tanex, Вы писали:

T>так и было мной сделано, дошло после


T>а вот еще у меня после каждого использования accumulate список "персонов" возрастает вдвое,

T>из-за чего???

По поводу этой штуки, пожалуй стоит воспользоваться предложением ArtDenis'a...

А по поводу accumulate — это ты как так?? ? У меня такого не происходит... Ты что с ним такое делаешь?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.