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

STL>>list<_Ty> - C++

Восстановить пароль Регистрация
 
Sasuke
 Аватар для Sasuke
0 / 0 / 0
Регистрация: 09.10.2009
Сообщений: 89
19.12.2010, 13:59     STL>>list<_Ty> #1
Подскажите, пожалуйста. Я сейчас пытаюсь вникнуть в суть контейнеров, их свойства и функции. Так вот, создал я двун. список с помощью list, тип определил свой, например _Ty. Добавление происходит четко, всё хорошо. После добавления решил, что нужно организовать поиск того узла. Задействовал функцию find() из algorithm, сделал сл. образом

C++
1
2
3
4
5
list<_Ty> ob1;
....
_Ty data(2,3); // какой-то там конструктор, например
return find(ob1.begin(),ob1.end(),data); // здесь, например возвращаю итератор
// но в find'е у меня ошибка, которую я не могу исправить..
Компилятор не может определиться с перегрузкой оператора == в данном блоке find():
C++
1
2
3
4
5
6
7
8
9
template<class _InIt,
    class _Ty> inline
    _InIt _Find(_InIt _First, _InIt _Last, const _Ty& _Val)
    {   // find first matching _Val
    for (; _First != _Last; ++_First)
        if (*_First == _Val) // !!!!!!!!!!!!!!!!!!
            break;
    return (_First);
    }
Выводит несколько вариантов перегрузки, типа или-или.
Хм.. Собственно вот. Подскажите, пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2010, 13:59     STL>>list<_Ty>
Посмотрите здесь:

C++ STL List
C++ STL list
List STL C++
STL list C++
C++ Удаление list STL
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.12.2010, 15:22     STL>>list<_Ty> #2
по сабжу: вами должен быть переопределен оператор сравнения == для Ty, если тип не стандартный или POD
Sasuke
 Аватар для Sasuke
0 / 0 / 0
Регистрация: 09.10.2009
Сообщений: 89
19.12.2010, 16:18  [ТС]     STL>>list<_Ty> #3
А смысл? Существует функция find_if() для этого. К тому же перегрузок == так много, что компилятор в замешательстве. и не знает что вызвать.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.12.2010, 16:30     STL>>list<_Ty> #4
Sasuke, Так. Поясню.
Этот код работать не будет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <list>
#include <algorithm>
 
struct something
{
    int first, second;
    something(int first_=0, int second_=0):
        first(first_), second(second_)
    {
    }
};
 
int main()
{
    const int n=10;
    std::list<something> Lst;
    //Заполнили
    something one(4, 5);
    std::list<something>::iterator It=std::find(Lst.begin(), Lst.end(), one);
    return 0;
}
А этот будет.

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
#include <iostream>
#include <list>
#include <algorithm>
 
struct something
{
    int first, second;
    something(int first_=0, int second_=0):
        first(first_), second(second_)
    {
    }
};
 
bool operator ==(const something& first, const something& second)
{
    if(first.first == second.first && 
        first.second == second.second)
        return true;
    return false;
}
 
int main()
{
    const int n=10;
    std::list<something> Lst;
    //Заполнили
    something one(4, 5);
    std::list<something>::iterator It=std::find(Lst.begin(), Lst.end(), one);
    return 0;
}
Добавлено через 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
40
41
42
43
44
#include <iostream>
#include <list>
#include <algorithm>
 
struct something
{
    int first, second;
    something(int first_=0, int second_=0):
        first(first_), second(second_)
    {
    }
};
 
bool operator ==(const something& first, const something& second)
{
    if(first.first == second.first && 
        first.second == second.second)
        return true;
    return false;
}
 
std::ostream& operator <<(std::ostream& os, const something& one)
{
    os<<one.first<<' '
        <<one.second<<'\n';
    return os;
}
 
int main()
{
    const int n=10;
    std::list<something> Lst;
    for(int i=0; i<n; ++i)
    {
        Lst.push_back(something(i+1, i+2));
    }
    something one(4, 5);
    std::list<something>::iterator It=std::find(Lst.begin(), Lst.end(), one);
    if(It != Lst.end())
        std::cout<<*It<<'\n';
             else
                      std::cout<<"Not finded\n";
    return 0;
}
Sasuke
 Аватар для Sasuke
0 / 0 / 0
Регистрация: 09.10.2009
Сообщений: 89
19.12.2010, 16:46  [ТС]     STL>>list<_Ty> #5
ForEveR, странно, до этого делал перегрузку ==, и не помогало. А сейчас всё работает! Спасибо Вам огромное! +1
Yandex
Объявления
19.12.2010, 16:46     STL>>list<_Ty>
Ответ Создать тему
Опции темы

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