程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何将 STL std::list 与对象一起使用?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何将 STL std::list 与对象一起使用??

开发过程中遇到如何将 STL std::list 与对象一起使用?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何将 STL std::list 与对象一起使用?的解决方法建议,希望对你解决如何将 STL std::list 与对象一起使用?有所启发或帮助;

我想创建按对象属性(物理大小)排序的对象链表;但到目前为止,我似乎必须自己编写代码...... 这些列表很短,通常每个都有十几个节点;但我可能有多达一千个清单;所以我负担不起使用 std::map 的额外重量。事实上,我对单链表很满意。 但我需要节点不仅仅是一个值。 我的对象中的键值很少会改变;然而,元素必须从一个列表中出来并经常移动到另一个列表。 ((实际使用:每个四边形一个列表,在四叉树中(如碰撞检测等);对象按大小排序,因为较大的对象数量较少但需要从较大的范围内快速选取,因此它们应该来自在列表中排在第一位。))

但是我发现的每个使用 std::List 维护排序列表的示例都使用整数列表作为示例;但这不是很有用;我所拥有的是具有一个值成员要排序的对象。 本来想用lower_bound找插入点,然后插入对象;但是lower_bound 迭代器将begin 和end 以及一个普通值作为第三个参数;我看不到可以指定使用对象的特定成员进行排序的机制。 当然,我可以定义一个转换运算符, @H_528_5@my_object_type::int(){ return sortby; } 那行得通吗?有没有更好的办法?

解决方法

我似乎在这个参资料中找到了我的答案: https://www.geeksforgeeks.org/lower_bound-in-cpp/ 在“语法 2”下;有第四个规定 参数是一个比较函子。所以,某事 像这样应该可以工作(尚未测试):

class pnt_proxy
{
    int x; //position
    int y;
    point* real_pnt; //the real point this represents
public:
    float sz; //rough largest diagonal across object
}


class pproxy_cmp : public std::binary_function< pnt_proxy,pnt_proxy,bool >
{
public:
    bool operator()( pnt_proxy const & a,pnt_proxy const & b ) const
    {
        return a.sz < b.sz;
    }
};

std::list< pnt_proxy > ll;

void insert_sorted( pnt_proxy const & pp )
{
    if( ll.size() )
    {
        std::list<pnt_proxy>::iterator insert_at;
        insert_at =
          std::lower_bound( ll.begin(),ll.end(),pp,pproxy_cmp() );
        ll.insert( insert_at,pp );
    }
    else ll.push_BACk( pp );
}

大佬总结

以上是大佬教程为你收集整理的如何将 STL std::list 与对象一起使用?全部内容,希望文章能够帮你解决如何将 STL std::list 与对象一起使用?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:如何将