标题:容器 对象指针 泛型算法
只看楼主
zhongjiezhe
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2011-5-20
结帖率:66.67%
已结贴  问题点数:5 回复次数:4 
容器 对象指针 泛型算法
容器中存放的是一些列对象的指针,要对这写对象进行查找,能否直接使用泛型算法find,排序能否直接使用泛型算法sort
搜索更多相关主题的帖子: 算法 
2011-08-01 21:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:1 
以下是引用zhongjiezhe在2011-8-1 21:51:55的发言:

容器中存放的是一些列对象的指针,要对这写对象进行查找,能否直接使用泛型算法find,排序能否直接使用泛型算法sort
1. 使用find_if
程序代码:
#include <algorithm>
#include <iostream>

int main()
{
    int* buf[] = { new int(0), new int(1), new int(2) };

    struct foo {
        foo( int v ) : val(v)
        {
        }
        bool operator()( int* pv ) const
        {
            return *pv==val;
        }

        int val;
    };
    size_t cnt = sizeof(buf)/sizeof(buf[0]);
    int** p = std::find_if( buf+0, buf+cnt, foo(1) );
    if( p != buf+cnt )
    {
        std::cout << **p << std::endl;
    }

    return 0;
}

2. 可以直接用sort
#include <algorithm>
#include <iostream>

int main()
{
    int* buf[] = { new int(2), new int(1), new int(0) };

    struct foo {
        bool operator()( int* a, int* b ) const
        {
            return *a<*b;
        }
    };

    size_t cnt = sizeof(buf)/sizeof(buf[0]);
    std::sort( buf+0, buf+cnt, foo() );
    for( size_t i=0; i<cnt; ++i )
        std::cout << *buf[i] << ' ';
    std::cout << std::endl;

    return 0;
}
2011-08-02 08:23
我是菜鸟C
Rank: 4
等 级:业余侠客
帖 子:74
专家分:200
注 册:2011-3-27
得分:1 
  排序和查找是可以的。
2011-08-02 12:15
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:1 
这些函数都有重载的形式。像二楼写的,如果你再多传一个参数进去,它们就灵活多了。
2011-08-02 16:32
新手hakan
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2011-8-5
得分:1 
楼上的是高手啊,说的很在理!
2011-08-05 01:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-346571-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026611 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved